私はMonoGameで始める初心者プログラマーです。私はアニメーションを実行するためのコードを実装していましたが、解決方法がわからない問題が発生しました。この私がAnimationManagerクラスで使用されるコードです:アニメーションフレームレートvsゲームfps
public void Update(GameTime gameTime)
{
timeElapsed += (float)gameTime.ElapsedGameTime.TotalSeconds;
if (timeElapsed > timeToUpdate)
{
timeElapsed -= timeToUpdate;
//Tried to just reset timeElapsed to zero, still doesn't work
//timeElapsed = 0;
if (frameIndex < rectangles.Count -1)
{
frameIndex++;
}
else if (isLooping)
{
frameIndex = 0;
}
}
}
問題は、私は、毎秒24のフレームでアニメーションとゲームが60または30 fpsで、それぞれの更新コードをチェック上で実行されるときであることは、描画する時間ですアニメーションの新しいフレームでは、毎秒24枚の画像を均等に描画しようとしたため、フレームの残りの部分が得られます。 6フレームの残りの部分があります。この結果、約6フレームのアニメーションが2回描かれ、一部はスキップされ、アニメーション全体が約25%長くなります。これを修正する方法はありますか?このコードをDrawコールに移動し、60 fpsゲームで48 fpsで描画コールをキャップすることで、各アニメーションフレームが2回目の描画コールごとに描画されるようにすることはできますか?それが合理的な解決策であれば、私はこれをどうやって進めるのか分かりません。
VSyncはこのすべてにどのように影響しますか?この問題が解決されたとしても、アニメーションフレームが乱れますか?
編集:それは2dゲーム、手描きのアニメーションと言うことを忘れました。
おそらく、アニメーションフレーム(線形補間が十分であるかもしれない)の間にいくつかの補間を行うことになっているはずです。そうすれば、異なるフレームレートは問題にならないはずです(まだいくつかの問題が存在します) – UnholySheep
私は今、それについて読んでいます。それは2dにappliableですか? – david0009
私は毎秒24フレーム対30のあなたの説明を理解しているか分からない。アニメーションは、おそらくあなたの更新コードがやっているように見えるいくつかの経過時間の後にスプライトを交換するという観点から描画されるべきです。あなたは説明が深すぎるので、問題が何ではないかと考えていますが、問題は何ではありません。おそらく、あなたはその質問を言い換えて、より一般的に実際の行動と望ましい行動が何であるかを説明することができますか? –