16フレームの爆発スプライトがあります。
プレイヤーが小惑星と衝突するたびに、lose()関数が呼び出されます。
lost()関数内で、このコードは、16フレームのアニメーションを実行するアニメーション化されたスプライトシートを描画します。常にフレーム0から開始する必要がありますが、常にそうであるとは限りません。
expFrameID = 0;
expFrameID += (int)(time * expFPS) % expFrameCount;
Rectangle expRect = new Rectangle(expFrameID * expFrameWidth, 0, 63, 63);
spriteBatch.Draw(explosion, shipLocation, expRect, Color.White, 0f, new Vector2(32, 32), 1.0f, pickupSpriteEffects, 0.1f);
if (expFrameID == 15)
expIsDrawn = true;
時間変数は次のとおりです。ゲームの合計経過時間を取得します。
time = (float)gameTime.TotalGameTime.TotalSeconds;
問題であると私が信じているのは、lose()関数からの次の行です。
expFrameID += (int)(time * expFPS) % expFrameCount;
それは機能し、アニメーション化します。ただし、常にフレーム0で開始するわけではありません。0〜16のランダムなフレームで開始しますが、それでも1秒あたり16フレームで正しく実行されます。
では、どうすれば常にフレーム0から開始することができますか?