无法让我的角色在 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;
}
所以我们目前正在尝试学习 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;
}