使用_kbhit()和_getch()作为输入,如何清除用户的输入流?

时间:2016-10-21 19:29:03

标签: c++ windows

我使用控制台在Windows上使用C ++制作游戏,这涉及到基于回合制的战斗。我使用Sleep()函数来延迟战斗中的消息,然后在按键被触发时进行消息。我的问题是,虽然游戏暂停了#34;通过睡眠功能,它仍然计算用户的按键,然后开始使用它们。

例如,如果用户按下" a"在游戏休眠时按键四次,在按下按键后很长时间内按下按键四次。

我如何暂时"关闭"用户按键的能力是否可以在程序中注册?

2 个答案:

答案 0 :(得分:0)

AFAIK你不能把它关闭但是你可以忽略击键而不是有一个忽略所有键击的循环

e.g。

time_t delay = 10;  // timeout delay
time_t start = time(NULL); // normally returns seconds

do
{
  if (_kbhit()) getch();
}
while (time(NULL) - start < delay);

当然你可以在等待循环中做其他事情,以及检查按下了什么键,然后中断while循环。

答案 1 :(得分:0)

_kbhit()getch()是缓冲功能。睡眠时输入的所有内容都将被发送到缓冲区,并在您的功能唤醒后立即按顺序处理以读取新的kb命中。

作为无缓冲的替代方案,您可以考虑GetKeyboardState()在特定时刻获取键盘的状态。它没有缓冲,所以它更适合你的游戏。