私はゲームを作成しており、2つの矢印キーが同時に押されたときに検出できるようにしたいと考えています。例えばC++でのWM_KEYUPイベントとWM_KEYDOWNイベントの検出
:
UPとLEFTが押された場合:私は一人でUPを押すと文字が北西
を移動したい:私はUPとLEFTが押されていた場合、文字が
北に移動すると、 LEFTがリリースされました:北西に移動していたキャラクターには、北への移動が始まります。
私は4つのブール値を使ってこれを実装しようとしました。これは、どの矢印キーが押されたかを追跡します。
LRESULT CALLBACK WindowProc (HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
//Variables and stuff initialized
switch (msg)
{
case WM_CREATE:{//Stuff to initialize windows info}break;
case WM_COMMAND:{//Stuff that responds to menubar selections}break;
case WM_KEYDOWN:
{
switch(wParam)
{
case VK_UP:{moveUp=true;}break;
case VK_DOWN:{moveDown=true;}break;
case VK_LEFT:{moveLeft=true;}break;
case VK_RIGHT:{moveRight=true;}break;
//More cases for handling W,Q,A,S,D and SPACE inputs
default: //Stop moving character
}
}
//Make changes to player input over here
case WM_KEYUP:
{
switch(wParam)
{
//Cases for handling ESCAPE, P, R, W and SPACE inputs
case VK_UP:{moveUp=false;}break;
case VK_DOWN:{moveDown=false;}break;
case VK_LEFT: {moveLeft=false;}break;
case VK_RIGHT:{moveRight=false;}break;
}//end switch
}//end WM_KEYUP
break;
case WM_PAINT:{}break;
case WM_SIZE:{}break;
case WM_DESTROY:{}break;
}//end switch
return DefWindowProc (hwnd, msg, wParam, lParam);
}
とその動作していない... moveUpという、moveDown ...と私はちょうどWM_KEYDOWNイベントをキャッチしていた場合boolsが設定されている...しかし、私はWM_KEYDOWNコードを使用する場合、彼らは全く検出されませんそれらを偽にする。
これがなぜそうであるか分かりません。私のゲームで特定のモードに入るために文字キーを使って同じ問題があった。 「Q」が押されている限り、私はゲームを特別なモードにして、それがリリースされたときにそのモードから出たいと思っていました。しかし、この矢印キーのようなものは機能しませんでした。
ここには何かがありますか?
彼らは全く検出されていないとはどういう意味ですか?あなたの 'WM_KEYDOWN'ハンドラは単純に静的/グローバル値を設定しています。これは、WndProcがメッセージを受信するかどうかには影響しません。実際の問題の原因となっているコードを削除しました。 –