2D платформер гравитационной физики с замедленным движением - PullRequest
1 голос
/ 18 июня 2010

Я точно настроил физику своего 2-го платформера, и когда я добавил замедленное движение, я понял, что оно испорчено.

У меня проблема в том, что по какой-то причине физика все еще зависит от частоты кадров. Поэтому, когда я сокращал время, все силы тоже уменьшались. Таким образом, сила прыжка уменьшается, т.е. в замедленном режиме персонаж прыгает по вертикали на меньшую высоту, а сила гравитации также уменьшается, поэтому персонаж летит дальше в воздухе, не падая.

Я отправляю функцию обновления в надежде, что кто-то может помочь мне (я разделил вертикальные (прыжок, гравитация) и ходьбу (произвольное направление ходьбы на платформе - платформы могут быть под любым углом) векторы:

characterUpdate:(float)dt
{
    //Compute walking velocity
    walkingAcceleration     = direction of platform * walking acceleration constant * dt;
    initialWalkingVelocity  = walkingVelocity;

    if( isWalking )
    {
        if( !isJumping )
            walkingVelocity = walkingVelocity + walkingAcceleration;

        else 
            walkingVelocity = walkingVelocity + Vector( walking acceleration constant * dt, 0 );
    }

    // Compute jump/fall velocity
    if( !isOnPlatform )
    {
        initialVerticalVelocity = verticalVelocity;
        verticalVelocity        = verticalVelocity + verticalAcceleration * dt;
    }

    // Add walking velocity
    position = position + ( walkingVelocity + initialWalkingVelocity ) * 0.5 * dt;

    //Add jump/fall velocity if not on a platform
    if( !isOnPlatform )
        position = position + ( verticalVelocity + initialVerticalVelocity ) * 0.5 * dt;

    verticalAcceleration.y = Gravity * dt;
}

1 Ответ

1 голос
/ 22 марта 2011

Вам следует Исправить ваш временной шаг, , если вы умножаете dt везде, все будет зависеть от этого значения, и вы потеряете контроль.

...