2013-07-21 4 views
0

그래서 두 번 실행 한 후에 애니메이션을 중지하려고합니다. animate 필드에 해당하는 경우Libgdx 애니메이션 루프를 두 번만 실행하십시오.

if(animate){ 
     stateTime += Gdx.graphics.getDeltaTime(); //stateTime was initialized to 0 
     currentFrame.setRegion(blink.getKeyFrame(stateTime, true)); 
} 
else 
    currentFrame.setRegion(defaultRegion); // again, my own field! 

모든 것이 uptill 여기 잘 작동 : 나는이 내가 내 현재 프레임을 얻는 방법이다

Animation blink = new Animation(BLINK_TIME, frames); // parameters are my fields 

을 설정하여 애니메이션을 재생하고 있습니다.

if(blink.isAnimationFinished(stateTime)){ 
     blinkTimes++; 
     if(blinkTimes>=2) 
      animate = false; 
    } 

문제는 isAnimationFinished(stateTime)가 호출되지 없구요입니다 : 지금은 애니메이션을 중지하려면,이 내가 그것을 위해 할 것입니다. 애니메이션 반복으로 뭔가를해야한다고 생각합니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까? 감사합니다.

답변

3

발견!

isAnimationFinished(stateTime)은 루프에서 애니메이션을 재생할 때 작동하지 않습니다. 그래서 Animation.Normal 모드에서 재생하고 falseblink.getKeyFrame(stateTime, false)에 사용하여 애니메이션 클래스가 비 루프 모드에서 실행되도록해야합니다!

1

모두 괜찮아 보입니다. 난 당신이 렌더링 방법 또는 업데이트 방법 내부

stateTime = 0; 

초기화가 생각하는 경우 먼저 그 값 = 0 다음은이 애니메이션이 완료됩니다 곳의 위치를 ​​결코 도달하지 결국 ... 그것에 deltaTime를 추가 할 수 있습니다. 나는 .. 나는이 도움이 되었으면 좋겠 때

if(animate) // log what is your stateTime 

그리고 한 가지 더

if(blink.isAnimationFinished(stateTime)){ 
    blinkTimes++; 
    stateTime = 0 ; //----------- because your animation should start from begining else it will complete 2 cycles in no time. 
    if(blinkTimes>=2) 
     animate = false; 
} 

당신이 stateTime의 값을 기록해야한다고 생각하고 내가 질문을 받고 있지 않다 경우 제대로 알려주세요.

+0

답변 해 주셔서 감사합니다. 내가 다시 확인해, 내 stateTime은 내 클래스의 생성자에만 있고 위의 코드가 내 렌더링 메서드에 있습니다. 내 stateTime를 기록, 여기있다 : 주 시간 : 0.017742615 주 시간 : 0.03272076 주 시간 : 0.04981166 주 시간 : 0.066713706 주 시간 : 0.08279193 주 시간 : 0.105113775 주 시간 : : 0.11688316 주 시간 : 0.13282415 주 시간 : 0.15010346 주 시간 : 0.16728222 주 시간 : 0.18312132 주 시간 : 0.20014429는 이 또한 내가 blink.isAnimationFinished 코드 블록 내부를 기록하고 발견 제어가 결코 도달하지 ! – Jazib

관련 문제