我正在使用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()。
答案 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
想法是:如果在上次传球时没有按下按键,但现在按下了按键,请执行此操作。