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