gpt4 book ai didi

c++ - 在C++中检测WM_KEYUP和WM_KEYDOWN事件

转载 作者:行者123 更新时间:2023-12-02 10:26:16 32 4
gpt4 key购买 nike

我正在写游戏,希望能够检测到何时同时按下两个箭头键。

例如 :

如果按UP和LEFT键:我希望角色向西北移动
如果仅按UP键:我希望角色向北移动
如果按下UP和LEFT,现在释放了LEFT:我希望向西北移动的角色只能开始向北移动。

我尝试使用4个 bool(boolean) 值来实现此目的,该 bool(boolean) 值跟踪已按下哪个箭头键。

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 ..和bool ...,但是如果我使用WM_KEYDOWN代码将其设置为false,则根本无法检测到它们。

不知道为什么会这样。在我的游戏中使用字符键进入特定模式时遇到了相同的问题。只要按下“Q”,我就希望游戏处于特殊模式,并在发布时退出该模式。但是,即使那样也没有用,就像这个箭头键不起作用一样。

这里有我想念的东西吗?

最佳答案

我看到的直接问题是缺少break;case WM_KEYDOWN:语句

这意味着每次case WM_KEYDOWN:将moveX设置为true时case WM_KEYUP:立即将其设置为false。您说过,当您“仅捕获WM_KEYDOWN事件”时,moveX变量设置正确,这确实是问题所在。注释掉case WM_KEYUP:后,控件将在中断之前流入case WM_PAINT:(您可能不会注意到)。

关于c++ - 在C++中检测WM_KEYUP和WM_KEYDOWN事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128071/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com