2011-12-01 6 views
1

XNA를 사용한 제 1의 2D 게임을하고 있는데 약간의 문제가 있습니다.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 스크롤, 내 스프라이트에 실행 효과를 부여하려면 같은 코드가 다른 SpriteSheet 스프라이트가 왼쪽으로 실행될 때. 모든 것이 잘 작동합니다. 90 %의 시간을 말하고 싶지만 나머지 10 %는 스프라이트 시트의 두 프레임 (왼쪽 및 오른쪽)의 프레임 중 하나에 남아 있으며 프로그램을 닫을 때까지 멈추지 않습니다. 그게 바로 같은 순간에 일어난 적이 없기 때문에 나는 이유를 알아 내지 못합니다. 때로는 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; 
} 

하지만 당신은 무슨 생각에 더 많은 코드를 보여주기 위해이 ...

관련 문제