0

XNA を使用した最初の 2D ゲームに取り組んでいますが、少し問題があります。スプライトに実行中の効果を与えるために、次のコードを使用してSpriteSheetをスクロールします (実行中):

    if (AnimationDelay == 6)
            {

                if (CurrentFrameR.X < SheetSizeR.X)
                {
                    ++CurrentFrameR.X;
                }
                else
                {
                    CurrentFrameR.Y++;
                    CurrentFrameR.X = 1;
                }
                if (CurrentFrameR.Y >= SheetSizeR.Y)
                {
                    CurrentFrameR.X = 0;
                    CurrentFrameR.Y = 0;
                }

                AnimationDelay = 0;
            }
            else
            {
                AnimationDelay += 1;
            }

            xPosition += xDeplacement;


        }

そして、これらは使用されるオブジェクトです:

    Point FrameSizeR = new Point(29, 33);
    Point SheetSizeR = new Point(5, 1);
    Point CurrentFrameR = new Point(0, 0);
    int AnimationDelay = 0;

スプライトが左に実行されているとき、私は異なるスプライトシートを持つ同じコードを持っています。90% の時間は問題なく動作していますが、残りの 10% のスプライト アニメーションはSpriteSheetの 1 つのフレームに両方向 (左右) にとどまり、プログラムを閉じるまで動かなくなります。問題は、それが同時に発生することは決してないため、理由を完全に理解できないことです..時には10、15、30秒後、時には起動時にさえも! 理由はありますか?事前に感謝し、コードの他の部分が必要な場合はお知らせください

4

1 に答える 1

1

コードは次のように書き直すことができます。

ElapsedTimeFrame += (float) GameTime.ElapsedTime.TotalSeconds;

if (ElapsedTimeFrame >= TimePerFrame)
{
    CurrentFrameR.X = (CurrentFrameR.X + 1) % SheetSizeR.X;

    if (CurrentFrameR.X == 0)
    {
       CurrentFrameR.Y = (CurrentFrameR.Y + 1) % SheetSizeR.Y;
    }

    ElapsedTimeFrame-= TimePerFrame;
}

しかし、何が起こるかを推測するには、さらにコードを表示する必要があります...

于 2011-12-01T22:48:17.190 に答える