Monogame - 按键'按下'而不是'Hold'跳转

时间:2016-05-01 01:00:03

标签: c# .net monogame

保持简短和简单:

我有一个带有可移动角色的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;
}

1 个答案:

答案 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;
}