使用XNA的SpriteSheet动画

时间:2011-12-01 15:51:06

标签: c# xna sprite sprite-sheet

我正在使用XNA开发我的第一款2D游戏,我遇到了一些问题。 要为我的Sprite提供运行效果,我使用此代码(正确运行)滚动 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;

当精灵运行时,我有不同的 SpriteSheet 相同的代码。 一切都工作正常我会说90%的时间,但另外10%的精灵动画停留在 SpriteSheet 的一个帧上,在两个方向(左和右)上它一直保持卡住直到我关闭程序。 事情是我无法弄清楚为什么因为它永远不会在同一时刻发生..有时甚至在10,15,30秒之后甚至在开机时! 知道为什么吗? 在此先感谢您,如果您需要代码的任何其他部分,请告诉我

1 个答案:

答案 0 :(得分: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;
}

但你必须展示更多代码来猜测会发生什么......