C# 当前键盘状态按下
我正在用XNA编写一个游戏教程,但我正在稍微修改它。我没有根据持续时间将投射物添加到数组中,而是尝试通过按空格键将它们添加到数组中。这样用户就可以控制导弹的发射C# 当前键盘状态按下,c#,xna,C#,Xna,我正在用XNA编写一个游戏教程,但我正在稍微修改它。我没有根据持续时间将投射物添加到数组中,而是尝试通过按空格键将它们添加到数组中。这样用户就可以控制导弹的发射 if (currentKeyboardState.IsKeyDown(Keys.Space)) { AddProjectile(player.Position + new Vector2(player.Width / 2, 0)); } private void AddProjectile(Vecto
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
其思路是:如果在上一次传递时没有按下该键,但现在按下了该键,则执行此操作。非常聪明,这应该会起作用。我会给它一个运行,让你知道它是如何工作的。非常聪明,这应该会工作。我会试一试,让你知道结果如何。