控制台应用程序等待keyup
我目前正在研究c#中的roguelike。 世界,玩家等在控制台内呈现。 但是当控制台中有太多变化时,它会滞后。 为了绕过这个,我试图让程序等待玩家取消按下玩家所按的键。 任何人都知道如何制作这个? 不好,没有类似Console.ReadKeyUp()
东西。
while(Console.KeyAvailable){ }
好像不行……
这是一些代码:
public void move(){ if(!MainClass.loading){ switch(Console.ReadKey().Key){ case ConsoleKey.NumPad8: //walk up break; case ConsoleKey.NumPad4: //walk left break; case ConsoleKey.NumPad6: //walk right break; case ConsoleKey.NumPad2: //walk down break; case ConsoleKey.NumPad7: //walk left up break; case ConsoleKey.NumPad9: //walk right up break; case ConsoleKey.NumPad1: //walk left down break; case ConsoleKey.NumPad3: //walk right down break; case ConsoleKey.NumPad5: //eat break; } } }
这就是它的样子:
如果不将此应用程序重构为事件驱动格式(带有消息循环的隐藏窗口等),您最好的选择可能是挖掘WinAPI中可用的各种function。 这样的事情可能有用:
[DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool GetKeyboardState(byte [] lpKeyState);
您可以使用此函数查询完整的键盘状态 – 它返回一个包含键盘状态的256字节数组。 请参阅: 此处了解更多和一些示例。
例如,您也可以使用Console.ReadKey()
然后阻塞,直到GetKeyState()
为相关键返回低位0
:
[DllImport("user32.dll")] static extern short GetKeyState(VirtualKeyStates nVirtKey);
请参阅: 此处了解更多和示例。
MSDN: GetKeyState ; GetKeyboardState