0

無料版のHavok物理エンジンを使用して、C++のWindows7で簡単な3Dゲームを作成しています。WASDキーを使ってキャラクターを動かしたい。コードの構造は、この入力を非同期的にキャプチャする必要があるようなものです。シーンのすべてのフレームで呼び出される関数があり、キャラクターの位置を更新します(イベントに何らかのリスナーを使用する代わりに、キーが現在押されているかどうかを確認してみます)。私はwin32関数についてほとんどまたはまったく知らないので、良い解決策を探し回って、これをまとめました。

if (GetAsyncKeyState(0x41) & 0x8000) posX=-1.0f; //A
if (GetAsyncKeyState(0x44) & 0x8000) posX=1.0f;  //D
if (GetAsyncKeyState(0x57) & 0x8000) posX=1.0f;  //W
if (GetAsyncKeyState(0x53) & 0x8000) posX=-1.0f; //S

いくつかのprintfステートメントを確認した後、ビジュアルデバッガーはこれを使用して入力を取得していないようです。私はWM_KEYDOWNとWM_KEYUPを知っていますが、それらの使用方法についての簡単な説明を見つけることができず、非同期よりもイベントベースであることがわかります。

上記のスニペットに問題がありますか、それとも別のアプローチを試す必要がありますか?

4

2 に答える 2

0

A最良の推測:「 」ではなく「」をチェックしていますa。もちろん、Shiftキーも押したままにしない限り、aキーを押すだけではコードはトリガーされません。

于 2011-07-06T15:00:56.580 に答える
0

結局のところ、私の問題はGetAsyncKeyState()ではなく、FindWindow()とGetWindowRect()の使用にあるようです。現在のウィンドウがビジュアルデバッガーであることを認識していませんでした。修理済み。

于 2011-07-07T09:39:24.050 に答える