将 GetAsyncKeyState() 重置为默认值
Posted
技术标签:
【中文标题】将 GetAsyncKeyState() 重置为默认值【英文标题】:Reset GetAsyncKeyState() to default 【发布时间】:2016-10-08 14:27:36 【问题描述】:我正在学习使用kbhit()
、GetAsyncKeyState()
和getch()
的组合来构建我的主机游戏。
我正在使用 Visual Studio 2010 Express,我可以使用 c/c++ 标头。
兼容性问题(仅在 Windows 平台上运行)对我来说并不重要。
看看这个简单的代码:
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
int main()
printf("Welcome\n");
while(true)
if(_kbhit())
if(GetAsyncKeyState(VK_UP))
printf("UP\n");
else if(GetAsyncKeyState(VK_DOWN))
printf("DOWN\n");
else if(GetAsyncKeyState(VK_LEFT))
printf("LEFT\n");
else if(GetAsyncKeyState(VK_RIGHT))
printf("RIGHT\n");
else
printf("NOT ARROW\n");
getch();
return 0;
问题是:任何虚拟键输入都会打印 TWICE 而其他运行正常。
我不知道是什么问题,但我找到了简单的解决方法。
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
int main()
printf("Welcome\n");
while(1)
if(_kbhit())
if(GetAsyncKeyState(VK_UP))
printf("UP\n");
_getch();
else if(GetAsyncKeyState(VK_DOWN))
printf("DOWN\n");
_getch();
else if(GetAsyncKeyState(VK_LEFT))
printf("LEFT\n");
_getch();
else if(GetAsyncKeyState(VK_RIGHT))
printf("RIGHT\n");
_getch();
else
printf("NOT ARROW\n");
_getch();
return 0;
我的猜测是GetAsyncKeyState()
没有正确清除为默认值
有什么解释吗?
还为每个kbhit()
和GetAsyncKeyState()
添加_getch()
是一种冗余,因此会降低可读性,还有其他选择吗?
【问题讨论】:
GetAsyncKeyState "strange" behavior的可能重复 【参考方案1】:(GetAsyncKeyState(VK_UP) & 1)
【讨论】:
以上是关于将 GetAsyncKeyState() 重置为默认值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GetAsyncKeyState 查看按键被按下了 x 秒
使用 GetAsyncKeyState() 的键监听器/记录器