我目前正在为学校创建一个控制台游戏,但在主菜单中使用GetAsyncKeyState时遇到了麻烦。我的主菜单运行在一个无限循环中,一旦按下某个键,该循环只会中断一次。例如,我有:
if(GetAsyncKeyState('1'))
{
Play();
break;
}
单独使用,效果很好。问题在于,在我的Play()方法中,该 bat 旁边有一个cin语句,并且Menu()中的“1”进入了Play()中。我尝试了cin.clear()无济于事,并且cin.ignore(...)阻止了从Menu()到Play()的瞬时更改。有什么办法可以防止这种情况的发生?
最佳答案
在调用Play()
之前尝试一下
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
另外,在使用GetAsyncKeyState时,您应该屏蔽掉除高位以外的所有内容,如下所示:
if ((GetAsyncKeyState('1') & 0x8000) != 0)
请参阅“返回值”下的文档以了解原因:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293%28v=vs.85%29.aspx