我有一个控制台游戏,玩家通过按下一个数字来选择和能力,对敌人做出的能力,我们等待2秒然后敌人对玩家有能力,然后我们再等待2秒然后我们开始过度。我发现,如果玩家在下一个循环进行等待时按下一个能力键,它将立即执行(按键位于缓冲区中)。我想在每个循环开始时清除缓冲区。
我尝试了以下内容,但它永远不会从Peek()调用回来。
private void FlushKeyboard()
{
while (Console.In.Peek() != -1)
Console.In.Read();
}
答案 0 :(得分:2)
您可以使用Console.KeyAvailable
property查看是否有要读取的密钥,然后使用ReadKey进行读取:
while (Console.KeyAvailable)
{
ConsoleKeyInfo key = Console.ReadKey();
}
此外,如果您不希望屏幕上显示键入的字符,则可以使用接受intercept flag的覆盖:
ConsoleKeyInfo key = Console.ReadKey(true);