我目前正在使用GetAsyncKeyState()来检测Keydown事件,但是在按住键时将重复这些事件.
阻止事件重复的简单方法是什么?
例
如果按住键盘上的键一段时间,我将得到如下输出:
iiiiiiiiiiiiiiiiiiiiiiiii
代替这个:
i
我想强迫用户再次按下键来触发事件.
解决方法:
避免使用与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);
}