gpt4 book ai didi

c++ - 将 GetAsyncKeyState() 重置为默认值

转载 作者:行者123 更新时间:2023-11-30 16:56:23 27 4
gpt4 key购买 nike

我正在学习使用 kbhit() 的组合, GetAsyncKeyState()getch()构建我的控制台游戏。

我使用的是 Visual Studio 2010 Express,C/C++ header 对我来说没问题。

兼容性问题(仅在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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com