我正在编写一个游戏,并希望能够检测同时按下两个箭头键的时间。
例如 :
如果按下 UP 和 LEFT :我想让角色向西北移动
如果单独按下 UP :我想让角色向北
移动只向北移动。
我尝试使用 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 代码使它们为假,则根本不会检测到它们。
不知道为什么会这样。在我的游戏中使用字符键进入特定模式时遇到了同样的问题。只要按下“Q”,我就希望游戏处于特殊模式,并在发布时退出该模式。但即使这样也不起作用,就像这个箭头键不起作用一样。
我在这里缺少什么吗?