私はゲームを書いていて、2 つの矢印キーが同時に押されたことを検出できるようにしたいと考えています。
例えば :
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);
}
そして、動作していません... WM_KEYDOWNイベントをキャッチしているだけの場合、moveUp、moveDown ..、およびブール値が設定されています...しかし、WM_KEYDOWNコードを使用してそれらをfalseにすると、それらはまったく検出されません。
なぜそうなのかわかりません。キャラクター キーを使用してゲームの特定のモードに入るのと同じ問題がありました。「Q」を押している間、ゲームが特別なモードになり、リリース時にそのモードから抜け出したかったのです。しかし、この矢印キーが機能していないように、それでも機能しませんでした。
ここに欠けているものはありますか?