hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
Module/拡張版getkey - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

Module

[hsp3]

拡張版getkeyモジュール

本家HSP3掲示板に複数キーのトリガー取得の話題がありましたので作ってみました。 ※サンプルを実行するときは #if 0 を #if 1 にしてください

モジュール

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
-
|
-
|
!
|
-
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
-
|
-
|
!
!
 
 
 
 
 
#ifndef __MODULE_GETKEYEX__
#define __MODULE_GETKEYEX__
 
#module "mod_getkeyex"
 
#undef getkey
 
#uselib "user32.dll"
#func GetKeyboardState "GetKeyboardState" var
 
#define FLAG_DOWN        $1
#define FLAG_TRIGGER    $2
 
#deffunc getkey_init
    sdim data, 256
    dim  flag, 256
    return
 
;---------------------------------------------------------------------
; getkey p1, [p2]
;---------------------------------------------------------------------
; ※ p2 を指定した場合は標準的な動作をします(トリガ状態は取得されません)
; 
; キーボード及びマウスボタンの状態をチェックして数値型配列変数に代入します。
; 返される値は、キーが押されているか、押された瞬間(トリガ)か、を加算した
; 値が入っています。
; それぞれ、
; キーが押されていれば、1を加算します。
; 押された瞬間(トリガ)ならば、2を加算します。
; 何も押されていなかった場合は、0 になっています。
#deffunc getkey array p1, int p2
    if p2 {
        ; 標準動作
        getkey@hsp p1, p2
        return
    }
    ; 拡張動作
    GetKeyboardState data
    repeat 256
        ; フラグ設定
        ; 拡張マクロONしていないとコンパイルできないので peek@hsp にしてある
        if peek@hsp(data, cnt) & $80 {
            flag(cnt) |= FLAG_TRIGGER
            if flag(cnt) & FLAG_DOWN {
                flag(cnt) &= FLAG_TRIGGER ^ $ff
            }
            flag(cnt) |= FLAG_DOWN
        } else {
            flag(cnt) &= (FLAG_DOWN | FLAG_TRIGGER) ^ $ff
        }
        p1(cnt) = flag(cnt)
    loop
    return
 
#global
 
getkey_init
 
#endif
 
#if 0
;-----------------------------------------------------------
; テスト
 
;#include "mod_getkeyex.as"
 
*main
    getkey key, 32
    title "スペースの状態"+key
 
    getkey key
 
    redraw 0
    color 255,255,255 : boxf
    color 0,0,0
    pos 0,0
    ;「マウス左ボタン」が押された瞬間
    if 3 = key(1)  : mes "マウス左ボタンが押された" : else : mes ""
    ;「1」キーが押された瞬間
    if 3 = key(97)  : mes "1が押された" : else : mes ""
    ;「2」キーが押されている。
    if 0 < key(98) : mes "2キーが押されている" : else : mes ""
    ;「3」キーが押されている。
    if 0 < key(99) { 
        if 3 = key(99) {
            mes "3が押された瞬間!!!!!!!!!"
        } else {
            mes "3キーが押されている"
        }
    }
    redraw 1
 
    wait 100
    goto *main
#endif

コメント

  • 標準動作のときもトリガー状態が取得できたほうがいいかな? -- Shark++ 2006-01-15 (日) 11:49:30
  • 標準動作のときはオリジナルと完全互換のほうが良いと思います。
    引数を一つ増やして取得するキーコード範囲を指定できるようにしてみては?
    getkey a,65,65 (で a.0 にトリガー状態含めてのキーコード65の状態取得とか) -- naznyark? 2006-01-16 (月) 00:52:08

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

モジュール(for HSP2)

HSP2用です。

hsp2.png

+  拡張版getkeyモジュールスクリプトfor HSP2



コメント

  • 「画面初期化モジュール」は作るだけ無駄っぽいorz -- GENKI? 2006-01-18 (水) 23:44:03


トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:31:26 (2436d)