我有一个基于回合的游戏。在您的轮到时,它会提示您进行移动,并要求您输入一次按键。只要按键被检测到,游戏就会继续,直到下一回合才会提示您。防止GetAsyncKeyState函数在被调用后检测输入吗? 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国家重点?如果是这样,什么是更好的选择?
哇......这让我感觉有点过头了。几个问题:在你的第一个代码块中,0x8000是什么意思,为什么需要那里?在我所有的GetAsyncKeyState调用中,它只是GetAsyncKeyState(参数)调用。 – Hatefiend
@Hatefiend:'0x8000'是一个十六进制数字,它的二进制表示形式是'1000000000000000'。通过将(使用'&')与对'GetAsyncKeystate'的调用结果相结合,您可以屏蔽除最重要位以外的所有内容。其结果是,如果该位为0,则组合的结果为0(在if语句中将其作为“false”),如果该位为“1”,则结果为非零在if语句中比较为'true')。 –
我也应该对我的问题进行更具描述性的描述。有时我会要求用户按下字母键和数字键,空格键等,因此您创建的for循环可能无法工作。真的看完循环之后..它告诉计算机......“好吧,用户按下了按键1?按键2还是按键3?等等。”我不明白这是如何改进的:if(key1 pressed)else if(key2 pressed)等等。我不明白它是如何解决我的问题,即使在函数调用之后,AsycKey仍然监听按键已经制成。 – Hatefiend