1

我在使用 Keyboard.GetState() 和 .IsKeysDown() 时遇到问题。他们根本行不通。

4

2 回答 2

1

如果您有 Synergy,那么它可能是问题之一。

我相信它会清除键盘输入缓存或类似的东西,因此当您再次轮询硬件时,Windows 没有任何击键可识别。

所以在 XNA 中调试时,禁用 Synergy。

于 2012-07-31T20:10:31.173 回答
0

听起来您可能遇到了几个问题。由于其他新开发人员在寻求键盘输入帮助时可能会发现这个问题,因此我将尝试涵盖这两个问题。

1) Keyboard.GetState() 返回当前正在按住哪些键的快照。KeyboardState.IsKeyDown() 不识别击键。它只是告诉您当前正在按下哪些键。由于这种工作方式,最好在尝试使用之前存储键盘状态。

2)在您的更新循环中,您将要存储当前的键盘状态:

KeyboardState newKeyboardState = Keyboard.GetState();

现在您可以检查是否发生了按键操作。A key press 意味着一个键曾经是按下的,现在是向上的:

if(previousKeyboardState.IsKeyDown(Keys.A && !newKeyboardState.IsKeyDown(Keys.A)) {
    Console.Out.WriteLine("Keystroke: A");
}

最后,保存当前状态,以便稍后检查:

previousKeyboardState = newKeyboardState;
于 2012-08-01T15:26:00.357 回答