无法让我的角色在Flash中双跳

时间:2016-03-11 02:30:03

标签: actionscript-3 flash

所以我们目前正在尝试在课堂上学习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进行此项目。任何有关这方面的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

你的问题是你的双跳总是在第一次跳跃的同时发生。这两个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;
}