1

2D プラットフォーマーの物理演算を微調整しましたが、スローモーションを追加したときに、めちゃくちゃになっていることに気付きました。

私が抱えている問題は、何らかの理由で物理学がまだフレームレートに依存していることです。そのため、経過時間を縮小すると、すべての力も縮小されます。したがって、ジャンプ力が縮小されます。つまり、スローモーションでは、キャラクターが垂直にジャンプする高さが小さくなり、重力も縮小されるため、キャラクターは落下することなく空中をさらに進みます。

誰かがここで私を助けてくれることを期待して、更新機能を送信しています(垂直(ジャンプ、重力)と歩行(プラットフォーム上の任意の歩行方向-プラットフォームは任意の角度にすることができます)ベクトルを分離しました):

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;
}
4

1 に答える 1

1

Timestepを修正する必要があります。どこでも dt を乗算している場合、すべてがその値に依存し、制御できなくなります。

于 2011-03-22T15:03:43.717 に答える