在XNA中等待KeyPressed时等待

时间:2015-01-14 18:45:58

标签: c# xna

我正在尝试学习XNA游戏编程,现在我想等待Key按下 我测试了它:

while (IsKeyPressed = Keyboard.GetState().IsKeyDown(key));

但是当密钥被释放时,IsKeyPressed也是如此

1 个答案:

答案 0 :(得分:3)

该代码实际上是一个自旋锁。 不要使用自旋锁

您看到的错误很可能是,因为您正在使用自旋锁,但它没有机会正确更新。

相反,您应该读取被按下的键,并在与停止处理相关的任何类中设置状态(可能是if函数中的简单Update检查。然后,当您检测到释放时,您将更改状态,以便if检查通过。

类似的东西:

 //Main Update
 if (Keyboard.GetState().IsKeyDown(key))
     myObject.Wait();
 else
     myObject.Continue();

 //Other object
 public void Wait()
 {
    waiting = true;
 }

 public void Continue()
 {
     waiting = false;
 }

 public void Update()
 {
      if (!waiting)
      {
         //Update state
       }
 }

您可以随时检查以前的状态,以避免重复调用WaitContinue,但这将是提供代码的微优化。