【发布时间】:2012-03-05 09:57:34
【问题描述】:
我有一个问题,我认为是由于未正确发送 wm_keyup 消息引起的。我相信当您移动角色并且输入会“卡住”时,Minecraft 中也会出现同样的问题。按键的动作在您按下后继续,直到您再次点击该键才停止。我听说这可能是 Windows 和键盘之间的问题,但我不完全确定。另外,大部分其他主流游戏都没有这个问题,所以必须有正确的方法来做到这一点。这是我的 Windows 程序代码的样子:
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;
每个 KeyInput 对象都有一个队列,该队列被键输入填充并在请求键盘输入时被清空。此代码用于多线程游戏,此技术可确保在任何线程上都不会丢失任何输入。我在 KeyInput 对象中使用互斥。
我在游戏中遇到的这个问题比在 Minecraft 中要多,我不知道为什么。我之前在做更简单的非多线程代码时也得到了它。我不知道如何解决这个问题。
感谢任何人提供的任何帮助或建议。
【问题讨论】:
-
嗯,你关注WM_ACTIVATEAPP了吗?