我正在使用控制台在C++上制作一个游戏,这涉及到一场基于回合的战斗。在战斗中,我使用Sleep()
函数来延迟消息,当键被击中时,消息就会向前推进。我的问题是,虽然游戏是“暂停”的睡眠功能,它仍然计数用户的按键,然后开始使用他们。
例如,如果一个用户在游戏睡觉时按了四次"a“键,它就会在被按下很久之后,继续使用该键四次。
我如何暂时“关闭”用户的键按下注册程序的能力?
发布于 2016-10-21 20:15:57
_kbhit()
和getch()
是缓冲函数。在睡觉时输入的所有内容都将被发送到缓冲区,并将在您的函数一醒来读取新的kb命中就会被依次处理。
作为非缓冲的替代方案,您可以考虑使用GetKeyboardState()
在特定时刻获取键盘的状态。它没有缓冲,所以它更适合你的游戏。
发布于 2016-10-21 19:39:12
AFAIK你不能关闭它,但是你可以忽略击键,而是有一个忽略所有击键的循环。
例如:
time_t delay = 10; // timeout delay
time_t start = time(NULL); // normally returns seconds
do
{
if (_kbhit()) getch();
}
while (time(NULL) - start < delay);
当然,您还可以在等待循环中执行其他操作,还可以检查按下了什么键,然后中断while循环。
https://stackoverflow.com/questions/40184184
复制相似问题