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 に答える