2011-12-01 38 views
1

我正在使用XNA开展我的第一个2D游戏,并且遇到了一些问题。 授予运行影响到我的雪碧,我经历了SpriteSheet滚动使用此代码(右运行):使用XNA的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

你的代码可以rewrited这样的任何其他部分:

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; 
} 

但你必须表现出更多的代码去猜测发生了什么?