[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00218] Re: キー入力



c.mos です。

キー入力の質問が相次いでいるので、内部の流れをC言語で示しておきます。
(いいのか? (^^;)

---------------------------------------------------------------
static WORD key_status;
static WORD key_status_xor;

WORD key_press_check()
{
    WORD key = get_keyport();
    key_status_xor = key ^ key_status;
    return key_status = key;
}

WORD key_hit_check()
{
    WORD key = key_press_check();
    if(key &= key_status_xor) {
        init_key_repeat();
    }
    return key;
}

WORD key_wait()
{
    WORD key = key_hit_check();
    if(key == 0) {
        while((key = key_repeat()) == 0);
    }
    return key;
}

WORD key_hit_check_with_repeat()
{
    WORD key = key_hit_check();
    if(key == 0) {
        key = key_repeat();
    }
    return key;
}
---------------------------------------------------------------
これを見ておわかりのように、key_press_check()を呼ぶと
内部のkey statusが更新されてしまうため、続けてkey_hit_check()を
呼んでも、押されたキーは取得できません。
pressとhitを両方得たい場合は、key_press_check()のみ呼んで
自前で処理するしかないと思われます。

しかし、こうして見ると、key_press_check()は、ポートを読むだけにした方が、
使い易かった気がするなぁ。(^^;;
			c.mos



ML Archives