【问题标题】:C# - XNA: Constantly checking keypressesC# - XNA:不断检查按键
【发布时间】:2016-03-06 13:35:56
【问题描述】:

我查看了所有我能找到的关于它的帖子,但似乎没有一个对我有用。我想在游戏的后台不断检查按键。

这是我试图让它工作的东西,但它不会。

namespace Base
{
    class MainClass
    {
        public static int X = 0;
        public static int Y = 0;
        public static void Main(string[] args)
        {
            while (true)
            {
                KeyboardState CurrentKeyboardState = Keyboard.GetState();

                if (CurrentKeyboardState.IsKeyDown(Keys.Left))
                {
                    MainClass.X += 1;
                }

                Console.WriteLine(X + ", " + Y);

            }
        }
    }
}

按左键不会提高 X 值,这意味着没有响应。 我在某处读到过,您无法在 Main 或线程中不断检查,但那我应该在哪里检查呢?

【问题讨论】:

  • 我应该说我是 C# 新手。
  • 在 XNA 游戏中运行后台线程来不断轮询输入通常是一个非常糟糕的主意。线程的 CPU 开销以及确保从您告诉数据进入 GPU 并且它实际上去的那一刻起没有数据损坏的复杂性通常是不值得的。因此,由于 Xna 游戏中的 Update 方法每秒循环 60 次,因此通常在游戏线程上的 update 方法中检查输入更改通常就足够了。
  • 这些样本中的任何一个都是这样做的:xbox.create.msdn.com/en-US/education/catalog/…

标签: c# xna keypress


【解决方案1】:

我认为如果您是 C# 新手,那么您可能也是 XNA 的新手。 XNA 有一个内置的游戏循环功能,每秒调用其 Update 和 Draw 方法 60 次。大多数游戏逻辑都应该写入到 Update 方法中,或者从 Update 方法中调用。这意味着您写入 Update 方法或从 Update 调用的任何代码都运行 60 次/秒。通常,您在那里调用 Keyboard.GetState() 。这意味着您正在以 60/秒的速度轮询键盘以获取任何输入。

浏览一些初学者教程可能对您有好处:

http://www.bing.com/search?q=xna+beginner+tutorial&qs=AS&pq=xna+begi&sk=AS1&sc=5-8&sp=2&cvid=6167E65B683F4A5EBB6488D48C8D011F&FORM=QBRE

【讨论】:

    【解决方案2】:

    您应该在 Update 上调用它,因为 Update 每秒运行 60 次。

    【讨论】:

      【解决方案3】:

      您的问题是键盘输入的命名空间在控制台应用程序中不起作用。它是为用于制作游戏的 C# XNA 框架设计的。我建议切换到 XNA 进行游戏编程,因为控制台应用程序不是为他们设计的。

      【讨论】:

      • 1.我已经想通了。 2. 不是控制台应用,我只是在控制台打印出来看看结果。 3.还是谢谢你! :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      相关资源
      最近更新 更多