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”都不会返回 true。

这个方法在一个新线程中执行,但是在主线程中运行它并没有改变任何东西。

我正在使用 Visual Studio 2012 Ultimate Update 1、.NET 4.5、Win 7 x64、XNA Game Studio 4.0

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

4

1 回答 1

1

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

如果您没有其他约束,则应使用 xna 提供的游戏类,并在 update 方法中调用 Input.GetState ... 在您可以在所需的线程中使用 keyboarstate 之后。

于 2013-05-07T13:55:34.033 回答