GetState.IsKeyDown()永远不会返回true(Microsoft.Xna.Framework.Input.Keyboard)

时间:2013-05-02 21:34:01

标签: c# .net input keyboard xna-4.0

我正在尝试使用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

我的代码是不正确的还是其他地方的问题?

1 个答案:

答案 0 :(得分:1)

输入不是可线程的,可能是由于Windows消息循环在主线程中,

如果你没有其他约束,你应该使用xna提供的游戏类,并在更新方法中调用Input.GetState ...之后你可以在你想要的线程中使用keyboarstate。