1

我正在使用 XNA 编写游戏教程,但我正在稍微修改它。我没有根据持续时间将弹丸添加到数组中,而是尝试通过按空格键将它们添加到数组中。所以这样用户就可以控制发射导弹。

  if (currentKeyboardState.IsKeyDown(Keys.Space))
  {
      AddProjectile(player.Position + new Vector2(player.Width / 2, 0));
  }



   private void AddProjectile(Vector2 position)
   {
       Projectile projectile = new Projectile();
       projectile.Initialize(GraphicsDevice.Viewport, projectileTexture, position);
       projectiles.Add(projectile);
   }

但是我遇到了一个小问题。由于我使用的是 IsKeyDown() 方法,导弹将被添加到射弹数组中,直到释放空格键。是否有一种方法可以注册按键而不是 IsKeyDown()。

IsKeyDown

4

1 回答 1

1

添加一个跟踪先前键盘状态的字段

KeyboardState _previousKeyboardState = Keyboard.GetState();

您将Update. 您现在可以进行边缘检测:

KeyboardState currentKeyboardState = Keyboard.GetState();
if(_previousKeyboardState.IsKeyUp(Keys.Space) 
   && currentKeyboardState.IsKeyDown(Keys.Space))
{
    //action
}
_previousKeyboardState = currentKeyboardState; //update previous state

想法是:如果在之前的通过中键没有被按下,但现在它被按下,做这个动作。

于 2012-12-17T16:56:03.040 回答