c++ - C++中的按键事件

标签 c++ winapi events keypress keydown

我目前正在使用 GetAsyncKeyState() 来检测 Keydown 事件,但是当您按住该键时,这些事件将重复出现。

阻止事件重复发生的简单方法是什么?


示例

如果我按住键盘上的 i 键一会儿,我会得到这样的输出:

iiiiiiiiiiiiiiiiiiiiiiiii

取而代之的是:

i


我想强制用户再次按下该键以触发该事件。

最佳答案

避免使用 WM_KEYDOWN 或 WM_CHAR 等键盘相关消息来检测键,当用户按住它时,Windows 会重复 WM_KEYDOWN。您只需要一个自己的 bool 标志来跟踪 key 的状态。只有当您看到 GetAsyncKeyState() 报告的状态与此标志之间存在差异时,才更改您的游戏对象状态。大致:

bool movingLeft = false;
...
if ((GetAsyncKeyState(VK_LEFT) < 0) != movingLeft) {
    movingLeft = !movingLeft;
    gameObject->setVelocity(movingLeft ? -10 : 0);
}

关于c++ - C++中的按键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5523111/

相关文章:

c++ - 将函数放入 vector 并执行

c++ - 使用 _set_se_translator 和编译标志

c++ - 为什么 Win32 控制台光标在全屏后停止闪烁?

java - 如何异步读取标准输入?

forms - 当表单在屏幕上可见时触发的事件

c++ - 创建派生类实例时提供基类构造函数参数

c++ - "enum - invalid conversion from int"在类里面

c++ - 使用 SSE/AVX 获取存储在 __m256d 中的值的总和

java - 我可以在崩溃的 OS API 周围放置 try/catch 吗?

javascript - 从 <a> 中删除点击事件处理程序