キーを押すことの違いは何ですか:
GetKeyState()
GetAsyncKeyState()
getch()
?
いつどちらを使用する必要がありますか?
GetKeyState() と GetAsyncKeyState() は Windows 固有の API ですが、getch() は Windows 固有でない他の C コンパイラで動作します。
GetKeyState() は、スレッドのメッセージ キューから返されたキー ステータスを取得します。ステータスは、ハードウェアに関連付けられた割り込みレベルの状態を反映していません。
GetAsyncKeyState() は、GetAsyncKeyState() への最後の呼び出し以降にキーが押されたかどうか、およびキーが現在 up か down かを示します。最上位ビットが設定されている場合、キーは押されています。最下位ビットが設定されている場合、GetAsyncKeyState() への前回の呼び出しの後にキーが押されました。
私が実際に見たのは、キーを押したままにし、キーが押されたときに動作を割り当てると、GetKeyState() を使用すると、GetAsyncKeyState() を使用した場合よりも動作が呼び出される回数が増えることです。
ゲームでは、GetAsyncKeyState() を使用することを好みます。
(MSDN ブログで詳細を確認することもできます)。
非同期の意味を考えてください。
GetAsyncKeyState()
キーの状態を非同期に取得します。つまり、何も待機せずに取得します。つまり、NOWです。
GetKeyState()
キーの状態を同期的に取得します。これは、読み取ろうとしているキーのキーの状態ですgetch()
。これは、キー押下自体とともにキーボード バッファのキューに入れられます。
例として、次のように入力されているが、まだ読み取られていないとします。
GetAsyncKeyState()
戻りますctrl pressed
GetKeyState() will return
H 押されたuntil you call
getch()`
GetKeyState()
I pressed
あなたが電話するまで戻ってきますgetch()
GetKeyState()
その後、shift pressed, 1 pressed
を呼び出すまで戻りますgetch()
。これは戻ります ( +!
を押した結果)shift1
GetKeyState()
その後戻りますctrl pressed