我目前正在使用GetAsyncKeyState()
来检测Keydown事件,但是当你按住键时会重复这些事件。
阻止事件重复的简单方法是什么?
示例
如果我按住键盘上的键i
一段时间,我会得到这样的输出:
iiiiiiiiiiiiiiiiiiiiiiiii
而不是:
i
我想强制用户再次按下该键以触发事件。
答案 0 :(得分:2)
避免使用与键盘相关的消息(如WM_KEYDOWN或WM_CHAR)来检测密钥,Windows会在用户按下时重复WM_KEYDOWN。您只需要一个自己的bool标志来跟踪密钥的状态。当您看到GetAsyncKeyState()报告的状态与此标志之间存在差异时,仅更改游戏对象状态。大致是:
bool movingLeft = false;
...
if ((GetAsyncKeyState(VK_LEFT) < 0) != movingLeft) {
movingLeft = !movingLeft;
gameObject->setVelocity(movingLeft ? -10 : 0);
}
答案 1 :(得分:1)
使用KeyPress事件(或KeyUp)。
顺便说一句,根据MSDN SHORT WINAPI GetAsyncKeyState(__in int vKey);
确定键是向上还是向下 在调用函数时, 以及之后是否按下了按键 之前调用GetAsyncKeyState。
它没有说明检测keydown事件。