1

私の 2D ゲームには、スプライトの Y 位置が各フレーム (Y= Y+1px) に 1 ピクセルを追加するため、上から下 (Y + ve 方向に移動) に移動するスプライトがあり、30 fps で十分に滑らかです。問題は、スプライトを高速で移動したい場合、つまり Y = Y + 10px で、各フレームに 10px を追加するため、動きがまったく滑らかに見えません。知りたいのですが、スムーズなアニメーションで高速を達成できる方法はありますか。

4

1 に答える 1

4

フレームベースの動きを使用しないでください。ゲームで突然「ヒックアップ」が発生した場合、プレイヤーや敵などは「現実的に」動いていませんが、デバイスが原因で速度が低下しています。時間ベースの移動を使用することをお勧めします。

現在、次のようなものがあると思います:

Update(GameTime aTime)
{
    mPlayer.Position += mPlayer.Direction;
}

ゲームが 10 FPS、100 FPS、または 0 FPS で実行されている場合に何が起こるかを考えてみましょう。動きに一貫性がないため、流動的ではありません。これを変更すると、移動は代わりに経過時間に基づくようになり、次のようなより一貫したアニメーションが得られます。

Update(GameTime aTime)
{
    mPlayer.Position += aTime.Milliseconds * (Constants.PlayerWalkSpeed * mPlayer.Direction);
}

最後に、それが十分にスムーズでない場合は、モーション ブラーを追加するなど、2D で非常に簡単に行うことができるようにする必要があります。最後のいくつかの古い位置を保存し、現在のものよりも少ないアルファでこれらの位置にプレーヤー スプライトを描画するだけです。

于 2012-12-20T12:00:01.240 に答える