防止GetAsyncKeyState函数在调用后检测输入?c++
Prevent GetAsyncKeyState function from detecting inputs after it is called? C++
我有一款回合制游戏。在轮到你的时候,它会提示你移动,并要求你按下一个键。只要检测到按键,游戏就会继续,直到下一个回合才会提示你。
我有问题,虽然与GetAsyncKeyState函数,因为它存储按键,即使它被调用后。
来自MSDN网站:确定在调用函数时键是上还是下,以及该键是否在之前调用GetAsyncKeyState后被按下。
黑体区域是我遇到的问题所在,因为用户可以在没有轮到他/她的时候输入垃圾按键,然后当轮到他/她的时候,游戏会提示用户并立即确认之前按下的输入。
我的功能非常类似于:
unsigned int getUserInput(){
while (true) //Await a user's input
{
if (GetAsyncKeyState(0x31))
{
return 1; //User pressed 1 key
}
else if (GetAsyncKeyState(0x32))
{
return 2; //User pressed 2 key
}
else if (GetAsyncKeyState(0x33))
{
return 3; //User pressed 3 key
}
else if (GetAsyncKeyState(0x34))
{
return 4; //User pressed 4 key
}
else if (GetAsyncKeyState(0x35))
{
return 5; //User pressed 5 key
}
else if (GetAsyncKeyState(0x36))
{
return 6; //User pressed 6 key
}
}
}
在这种情况下我应该不使用Asnc密钥状态吗?如果是这样,有什么更好的选择吗?
GetAsyncKeyState
返回的值为位域。您可以使用按位操作隔离您正在寻找的位。在您的特定情况下(用于检测当前是否按下键),您正在寻找高位。您可以这样测试它:
if (GetAsyncKeyState(0x31) & 0x8000)
{
return 1; //User pressed 1 key
}
然而,如果我正确理解你的问题描述,我不认为这将完全解决它。听起来你想让用户在功能运行时按下这个键(而不仅仅是按住这个键)。你应该做的是,在函数的开始检查是否按下了键。如果是,等待它被释放。像这样:
bool key_is_pressed = true;
while (key_is_pressed) {
key_is_pressed = false;
// the key codes you are checking are consecutive,
// so we can just loop over them
for (int key = '1'; key <= '6'; ++key) {
if (GetAsyncKeyState(key) & 0x8000))
key_is_pressed = true;
}
}
然后继续等待按下键的部分。
请注意,您突出显示的文本,"以及键是否在先前调用GetAsyncKeyState"之后被按下,实际上可能已经解决了您的问题。该信息存储在不同的位(低位)中,因此您可以将其隔离,并确保键之前没有按过。不幸的是,MSDN清楚地记录了这种行为不应该依赖。所以在使用GetAsyncKeyState
时,你应该忽略除hi位之外的所有内容。
相关文章:
- 如何从标准输入中检测格式化输入错误?
- 如果输入缓冲区不为空,请使用getchar.()检测Ctrl+d
- 通过终端在文件中输入时检测EOF(文件结束)时出现问题
- 检测要在 if 语句中使用的输入空格
- 如何在 c++ 中检测用户输入?
- GetAsyncKeyState 未检测到鼠标输入
- 如何使用 std::in 和 getline() 检测后台进程中从 bash 注入的输入
- 检测输入是字符串还是整数
- 检测`boost :: Math ::工具:: brent_find_minima()的不良输入
- 检测输入键的输入键,用于INT类型
- 检测输入中的整数溢出
- OpenCV级联分类器检测输入Mat边界外的MultiScale结果Rect
- QTreeWidgetItem更改-检测输入/ESC
- 使用 std::getline 检测输入结束
- 使用 cin.peek() 和使用 cin.peek() 检测输入结束时出现问题
- C++检测输入重定向
- QT在向qLabel显示图像时无法检测输入文件
- 防止GetAsyncKeyState函数在调用后检测输入?c++
- 使用WM_INPUT_DEVICE_CHANGE检测输入设备移除
- 如何检测输入正在从文件重定向