【问题标题】:Monogame - Key 'Pressed' instead of 'Hold' to JumpMonogame - 键“按下”而不是“按住”跳跃
【发布时间】:2016-05-01 01:00:03
【问题描述】:

将保持简短:

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

【问题讨论】:

    标签: c# .net monogame


    【解决方案1】:

    正如 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;
    }
    

    【讨论】:

    • 在声明 spacebarDown 时,您将其设置为什么 bool 值?这似乎只在我的播放器在空中时才有效。
    • 我会说将它设置为 false,但是一旦你按了一次空格,这应该不会影响任何事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多