C# 当前键盘状态按下

C# 当前键盘状态按下,c#,xna,C#,Xna,我正在用XNA编写一个游戏教程,但我正在稍微修改它。我没有根据持续时间将投射物添加到数组中,而是尝试通过按空格键将它们添加到数组中。这样用户就可以控制导弹的发射 if (currentKeyboardState.IsKeyDown(Keys.Space)) { AddProjectile(player.Position + new Vector2(player.Width / 2, 0)); } private void AddProjectile(Vecto

我正在用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()


添加一个字段,用于跟踪以前的键盘状态

KeyboardState _previousKeyboardState = Keyboard.GetState();
您将在
update
结束时更新此状态。现在可以执行边缘检测:

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

其思路是:如果上一次按键未按下,但现在按键已按下,则执行此操作。

添加一个字段以跟踪上一次键盘状态

KeyboardState _previousKeyboardState = Keyboard.GetState();
您将在
update
结束时更新此状态。现在可以执行边缘检测:

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

其思路是:如果在上一次传递时没有按下该键,但现在按下了该键,则执行此操作。

非常聪明,这应该会起作用。我会给它一个运行,让你知道它是如何工作的。非常聪明,这应该会工作。我会试一试,让你知道结果如何。