我目前正在为学校创建一个控制台游戏,而我在主菜单上使用GetAsyncKeyState时遇到了麻烦。我的主菜单在一个无限循环中运行,只有在按下一个键时才会中断。比如我有:
if(GetAsyncKeyState('1'))
{
Play();
break;
}
这一点,单独工作正常。问题是在我的Play()方法中,我有一个cin语句就在那个蝙蝠上,菜单()中的'1'进入我的Play()。我试过cin.clear()无济于事,而cin.ignore(...)阻止了从Menu()到Play()的瞬间变化。有什么办法可以防止这种情况发生吗?
答案 0 :(得分:3)
在致电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