我正在寫一個遊戲,並希望能夠檢測何時同時按下兩個箭頭鍵。在C++中檢測WM_KEYUP和WM_KEYDOWN事件
例如:
如果起身離開壓制:我想如果UP單獨按下字符向西北移動
:我想要的字符向北移動
IF起來就走了壓制,並現在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,下移..和布爾變量被設置,如果我只是捕捉WM_KEYDOWN事件......但沒有被發現,他們在所有如果我用WM_KEYDOWN代碼使它們成爲虛假。
不知道這是爲什麼。使用字符鍵在我的遊戲中輸入特定模式時出現同樣的問題。只要'Q'被按下,我希望遊戲處於特殊模式,並在遊戲發佈時退出該模式。但即使這樣也行不通,就像這個箭頭鍵不起作用一樣。
有什麼我在這裏失蹤?
你是什麼意思,他們根本沒有被發現?你的'WM_KEYDOWN'處理程序只是設置靜態/全局值,對吧?這不會影響WndProc是否接收消息。你遺漏了導致實際問題的代碼。 – 2012-04-12 17:01:40