按下currentKeyboardState

时间:2012-12-17 16:44:47

标签: c# xna

我正在使用XNA进行游戏教程,但我正在稍微修改它。我没有根据持续时间将射弹添加到数组中,而是尝试通过按SpaceBar将它们添加到数组中。因此,用户可以通过这种方式控制发射导弹。

  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

1 个答案:

答案 0 :(得分: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

想法是:如果在上次传球时没有按下按键,但现在按下了按键,请执行此操作。