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