2016-03-06 31 views
0

我已经看过所有可以找到的关于它的文章,而且它们都不适合我。我想不断检查游戏背景中的按键。C# - XNA:不断检查按键

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

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或线程中经常检查,但我应该在哪里检查它?

+0

我应该说我是C#的新手。 – DeePad

+0

运行后台线程以持续轮询输入在XNA游戏中通常是一个非常糟糕的主意。线程的CPU开销以及确保从告诉数据转到GPU并实际执行时没有数据损坏的复杂性通常是不值得的。因此,由于Xna游戏中的Update方法每秒循环60次,因此检查游戏线程中更新方法中经常使用的输入更改通常就足够了。 –

+0

我该怎么做? – DeePad

回答

0

我想如果你是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

0

为更新运行每秒60次你应该把它的更新。

0

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

+0

1.我弄明白了。 2.它不是一个控制台应用程序,我只是将它打印在控制台中以查看结果。 3.无论如何,谢谢! :) – DeePad