我正在学习使用和的组合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;
}
问题是:任何虚拟键输入都会打印两次,而其他的运行正常。
我不知道是什么问题,但我找到了简单的解决方法。
#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()
是一种冗余,因此会降低可读性,还有其他选择吗?