我正在尝试使用Xna.Framwork.Input检查键盘上是否按下某个键,但我使用的方法看起来不起作用。
我的代码(仅限重要部分):
using System.Threading;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework;
private static void GetInput() {
for (int i = 0; i < 1000; i++) {
Update();
if (IsKeyPressed(Keys.W)) {
Console.WriteLine("W pressed");
}
if (IsKeyPressed(Keys.S)) {
Console.WriteLine("S pressed");
}
Thread.Sleep(10);
}
}
public static KeyboardState CurrentKeyboardState { get; private set; }
public static void Update() {
CurrentKeyboardState = Keyboard.GetState();
}
public static bool IsKeyPressed(Keys key) {
return CurrentKeyboardState.IsKeyDown(key);
}
无论我按什么,“IsKeyPressed”永远不会返回真实。
此方法在新线程中执行,但在主线程中运行它并没有改变任何内容。
我正在使用Visual Studio 2012 Ultimate Update 1,.NET 4.5,Win 7 x64,XNA Game Studio 4.0
我的代码是不正确的还是其他地方的问题?
答案 0 :(得分:1)
输入不是可线程的,可能是由于Windows消息循环在主线程中,
如果你没有其他约束,你应该使用xna提供的游戏类,并在更新方法中调用Input.GetState ...之后你可以在你想要的线程中使用keyboarstate。