【问题标题】:GetState.IsKeyDown() never returns true (Microsoft.Xna.Framework.Input.Keyboard)GetState.IsKeyDown() 永远不会返回 true (Microsoft.Xna.Framework.Input.Keyboard)
【发布时间】:2013-05-02 21:34:00
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 2016-02-08
      • 2020-02-27
      相关资源
      最近更新 更多