Actionscript 3 如何在保持重力不变的情况下自然跳跃?
我有重力和跳跃“工作”。当你从平台上走下来时,你会慢慢地摔倒,直到你再次与地板相撞,但玩家的跳跃基本上是向上传送,而不是平稳地增加然后降低高度。我尝试将if语句1和3/2和4逻辑地结合起来,说玩家在触地时可以跳跃,或者在离开时可以平稳地摔倒,但最终我出现了一个错误,我的玩家从屏幕上消失了。我的最终目标是在离开平台时平稳跳跃和平稳下降(速度相匹配) 注:Actionscript 3 如何在保持重力不变的情况下自然跳跃?,actionscript-3,gravity,Actionscript 3,Gravity,我有重力和跳跃“工作”。当你从平台上走下来时,你会慢慢地摔倒,直到你再次与地板相撞,但玩家的跳跃基本上是向上传送,而不是平稳地增加然后降低高度。我尝试将if语句1和3/2和4逻辑地结合起来,说玩家在触地时可以跳跃,或者在离开时可以平稳地摔倒,但最终我出现了一个错误,我的玩家从屏幕上消失了。我的最终目标是在离开平台时平稳跳跃和平稳下降(速度相匹配) 注:gravity=1,vertSpeed=Infinity private function checkFalling(newY):void
gravity=1
,vertSpeed=Infinity
private function checkFalling(newY):void
{
var hitFloor:Boolean = HitTest.complexHitTestObject(player, floor, 1);
if (hitFloor)
{
trace("Grounded");
vertSpeed = Infinity;
}
if (!hitFloor)
{
trace("Floating");
vertSpeed = 1;
//newY += vertSpeed;
}
if (vertSpeed == Infinity)
{
if (zKeyPressed)
{
vertSpeed = jumpStart;
}
}
if (vertSpeed != Infinity)
{
trace("pushing");
vertSpeed += gravity;
newY += vertSpeed;
}
player.y = newY;
}
我想说的是不要做持续的命中测试,但那只是我。要让玩家从命中地板状态跳起,你需要检查
vertSpeed
和hittest,因此如果垂直速度小于零,那么我们跳起,我们完全忽略hittest
if (hitFloor)
if (vertSpeed>0){
trace("Grounded");
vertSpeed = Infinity;
}
// else not grounded, let's fly upwards
我对此进行了测试,并尝试了更多的解决方法,但我仍然得到了紧张的心灵运输跳跃。我认为这可能是因为经常检查球员是否触到地板,在跳跃时会立即产生剧烈的下压,或者在没有触到地板时将vertSpeed设置为1。你不应该将vertSpeed设置为1。否则一旦你跳下来,你就已经摔倒了。