【问题标题】:SpriteSheet Animation with XNA带有 XNA 的 SpriteSheet 动画
【发布时间】:2012-01-10 18:22:31
【问题描述】:

我正在使用 XNA 开发我的第一个 2D 游戏,但遇到了一个小问题。 为了给我的 Sprite 一个 running 效果,我使用以下代码滚动一个 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 秒后,有时甚至在启动时! 知道为什么吗? 提前致谢,如果您需要代码的任何其他部分,请告诉我

【问题讨论】:

    标签: c# xna sprite sprite-sheet


    【解决方案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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 1970-01-01
      • 2013-03-24
      • 2014-03-25
      • 1970-01-01
      • 2013-03-13
      • 2015-11-27
      • 1970-01-01
      • 2018-10-10
      相关资源
      最近更新 更多