无法让我的角色在 Flash 中进行二段跳

Can't get my character to double jump in Flash

所以我们目前正在尝试学习 class 中的 2D 平台游戏,其中一项任务是执行二段跳。

我尝试做的是设置两个布尔值,一个判断角色是否离地,另一个判断是否使用了二段跳。

一旦你第一次按下 Z 键,它就会使第一个布尔值关闭,当我们使用第二个时,第二个布尔值关闭。

我已经尝试了一些东西,但我无法让它真正进行双跳,只能进行单跳。

跳转代码如下所示

布尔值声明:

public var isOnGround:Boolean;
public var canDoubleJump:Boolean;

这是我们实际跳跃的地方

        if ( FlxG.keys.justPressed("Z"))
        {
            if (isOnGround)
            {
                play("jump");
                velocity.y = -JUMP_SPEED;
                isOnGround = false;
            }

            if (canDoubleJump && !isOnGround)
            {
                play("jump");
                velocity.y = -JUMP_SPEED;
                isOnGround = false;
                canDoubleJump = false;
            }
        }

最后,这就是我们最终着陆重置一切时的样子

        if ( !velocity.y && isTouching( DOWN ) )
        {
            isOnGround = true;
            canDoubleJump = true;
        }

补充一点,我在这个项目中使用了 Flixl。对此的任何帮助将不胜感激。

你的问题是你的二段跳总是和你的一跳同时发生。这两个 if 语句都会在第一次跳转时 运行。

让我们看一下代码:(有注释)

        //First jump (both jump flags isOnGround and canDoubleJump are true)

        //first jump, this is true
        if (isOnGround)
        {
            play("jump");
            velocity.y = -JUMP_SPEED;
            isOnGround = false;  //your setting this to false now, which makes the next if statement evaluate true as well (even though it shouldn't)
        }

        //since you set isOnGround to false in the above if statement, this if statement will also succeed on the first jump
        if (canDoubleJump && !isOnGround)
        {
            play("jump");
            velocity.y = -JUMP_SPEED;
            isOnGround = false;  //no point in this line, you already know it's false from the if statement
            canDoubleJump = false;
        }

要解决此问题,您需要在第一个成功时不要执行第二个 if。最好的方法是先检查二段跳:

//first jump, isOnGround is true, so this WON'T run
if (canDoubleJump && !isOnGround)
{
    play("jump");
    velocity.y = -JUMP_SPEED;
    canDoubleJump = false;
}

//first jump, this will run,  second jump it will be false
if (isOnGround)
{
    play("jump");
    velocity.y = -JUMP_SPEED;
    isOnGround = false;
}