保持简短和简单:
我有一个带有可移动角色的2D游戏,我写了一些代码让我的玩家跳起来,就像这样:
if (Keyboard.GetState().IsKeyDown(Keys.Space) && hasJumped == false)
{
sound.Play(volume, pitch, pan); // plays jumping sound
position.Y -= 5f; // position of jump
velocity.Y = -10.5f; // velocity of jump
hasJumped = true;
}
然而,当我按住空格键时,我的玩家将在他回到地面时继续跳跃,但我希望我的玩家只能在跳期间按住空格键的持续时间,然后再次按下它以跳转。
我感谢任何帮助。
更新
我的Collision()
函数中的一个碰撞if语句中我的速度重置:
if (rectangle.touchTopOf(newRectangle))
{
rectangle.Y = newRectangle.Y - rectangle.Height;
velocity.Y = 0f; // velocity reset
hasJumped = false;
}
答案 0 :(得分:2)
正如Brian已经提到的,你需要一个变量来记住最后一个空格键是否被按下了。这样的事情可以解决你的问题。
if (Keyboard.GetState().IsKeyDown(Keys.Space) && hasJumped == false && !spacebarDown)
{
sound.Play(volume, pitch, pan); // plays jumping sound
position.Y -= 5f; // position of jump
velocity.Y = -10.5f; // velocity of jump
hasJumped = true;
spacebarDown = true;
}
if(Keyboard.GetState().IsKeyUp(Keys.Space))
{
spacebarDown = false;
}