2011-12-01 45 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; 
} 

但你必須表現出更多的代碼去猜測發生了什麼?