C++ 由于wm_keyup,键盘输入卡滞
我有一个问题,我认为是由于wm_keyup消息未正确发送造成的。我相信同样的问题也会发生在Minecraft中,当你移动你的角色时,输入会被“卡住”。按键操作在您按下后继续,直到您再次轻触按键后才会停止。我听说这可能是windows和键盘之间的问题,但我不完全确定。而且,大多数其他主流游戏都没有这个问题,所以必须有一个正确的方法来解决。这就是我的windows过程代码的样子:C++ 由于wm_keyup,键盘输入卡滞,c++,winapi,input,keyboard,C++,Winapi,Input,Keyboard,我有一个问题,我认为是由于wm_keyup消息未正确发送造成的。我相信同样的问题也会发生在Minecraft中,当你移动你的角色时,输入会被“卡住”。按键操作在您按下后继续,直到您再次轻触按键后才会停止。我听说这可能是windows和键盘之间的问题,但我不完全确定。而且,大多数其他主流游戏都没有这个问题,所以必须有一个正确的方法来解决。这就是我的windows过程代码的样子: case WM_KEYDOWN: for (list<KeyInput>::iter
case WM_KEYDOWN:
for (list<KeyInput>::iterator t = key_inputs.begin(); t != key_inputs.end(); ++t)
(*t).PushKeyDown(ConvertKeyCode(wparam));
return 0;
case WM_KEYUP:
for (list<KeyInput>::iterator t = key_inputs.begin(); t != key_inputs.end(); ++t)
(*t).PushKeyUp(ConvertKeyCode(wparam));
return 0;
case WM\u KEYDOWN:
for(list::iterator t=key_inputs.begin();t!=key_inputs.end();++t)
(*t).PushKeyDown(ConvertKeyCode(wparam));
返回0;
案例WM_KEYUP:
for(list::iterator t=key_inputs.begin();t!=key_inputs.end();++t)
(t.PushKeyUp)(ConvertKeyCode(wparam);;
返回0;
每个KeyInput对象都有一个队列,队列中充满了键输入,并在请求键盘输入时清空。此代码用于多线程游戏,此技术确保任何线程上都不会丢失任何输入。我在KeyInput对象中使用互斥
我在游戏中遇到的问题比在Minecraft中更多,我不知道为什么。我以前在编写更简单的非多线程代码时也得到了它。我不知道怎么解决这个问题
我感谢任何人提供的任何帮助或建议。在查看WM_KEYDOWN消息的文档后,我发现LPRAM的第31位指示最后一条KEYDOWN消息是否与最新的相同。如果您使用此信息忽略重复消息,则可以解决此问题(但当按下键时,您将丢失来自该键的重复输入)。这是我的密码:
case WM_KEYDOWN:
{
union
{
uint lparam;
struct { uint bits:30,_30:1,_31:1; };
} lparam_data;
lparam_data.lparam = lparam;
if (!lparam_data._30)
// key was pushed
return 0;
}
嗯,你在关注WM_ACTIVATEAPP吗?