我正在学习使用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()
没有正确清除为默认值有什么解释吗?
还为每个
_getch()
和kbhit()
添加GetAsyncKeyState()
是一种冗余,因此会降低可读性,还有其他选择吗? 最佳答案
(GetAsyncKeyState(VK_UP)&1)
关于c++ - 将GetAsyncKeyState()重置为默认值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39933549/