Actionscript 3 如何在保持重力不变的情况下自然跳跃?

Actionscript 3 如何在保持重力不变的情况下自然跳跃?,actionscript-3,gravity,Actionscript 3,Gravity,我有重力和跳跃“工作”。当你从平台上走下来时,你会慢慢地摔倒,直到你再次与地板相撞,但玩家的跳跃基本上是向上传送,而不是平稳地增加然后降低高度。我尝试将if语句1和3/2和4逻辑地结合起来,说玩家在触地时可以跳跃,或者在离开时可以平稳地摔倒,但最终我出现了一个错误,我的玩家从屏幕上消失了。我的最终目标是在离开平台时平稳跳跃和平稳下降(速度相匹配) 注:gravity=1,vertSpeed=Infinity private function checkFalling(newY):void

我有重力和跳跃“工作”。当你从平台上走下来时,你会慢慢地摔倒,直到你再次与地板相撞,但玩家的跳跃基本上是向上传送,而不是平稳地增加然后降低高度。我尝试将if语句1和3/2和4逻辑地结合起来,说玩家在触地时可以跳跃,或者在离开时可以平稳地摔倒,但最终我出现了一个错误,我的玩家从屏幕上消失了。我的最终目标是在离开平台时平稳跳跃和平稳下降(速度相匹配)

注:
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。否则一旦你跳下来,你就已经摔倒了。