2011-08-01 3 views
0

저는 스프라이트와 애니메이션 스프라이트를 사용하고 있습니다. Animated Sprite를 16 프레임 사용했습니다. 왼쪽, 오른쪽, 위, 아래, 마지막 4 프레임의 애니메이션이 폭발합니다.애니메이션을위한 Thread.sleep (Andengine)

애니메이션 된 스프라이트가 스프라이트와 충돌하는 경우 ... 마지막 4 프레임을 5 초 동안 표시하고 싶습니다. andengine을 사용하는 법. 내가 Thread.sleep 함께 노력했지만 그 작동하지 않습니다.

// 업데이트의 내가

scene.registerUpdateHandler(new IUpdateHandler() { 
      @Override 
      public void reset() { 

      } 

      @Override 
      public void onUpdate(final float pSecondsElapsed) {  
       checkCollision(); 
} 

을 사용하고 내가 할 수 로그 캣의 마지막 4 프레임 번호를 얻을. 하지만 화면이 업데이트되지 않았습니다 ..

장면을 새로 고치는 방법. AnimatedSprite를 들어

checkCollision() 

{ 

if(sprite.collidesWith(animSprite)) 

    try 
        { 

        for (int i = 0; i < 4; i++) {           

         animSprite.setCurrentTileIndex(animBlast);      

         Log.v("balst",""+animBlast); 

         animBlast++; 

         if (animBlast> 15) { 

          animBlast= 12; 

         } 

         Thread.sleep(10); 

        } 

        } 
        catch (Exception e) { 

         // e.printStackTrace(); 

     } 
} 

답변

2

당신은 또한 정의 된 프레임 기간에 pFirstTileIndex에서 pLastTileIndex에 프레임 변화의 루프의 loopCount를 않는 sprite.animate(long[] pFrameDurations, int pFirstTileIndex, int pLastTileIndex, int loopCount) 방법을 가지고있다. 나는 이것이 당신이 찾고있는 것이라고 느낍니다.

+0

나중에 잘 덕분에 작업 andengine에서 방법 – JohnRaja

+0

@JohnRaja를 Thread.sleep를 사용할 수는, 지금까지 이에 대한 필요성을 느꼈다하지 않은 – Egor

2

업데이트 스레드에서 Thread.sleep()을 사용하면 안됩니다. 다른 모든 업데이트 및 다시 그릴을 차단하기 때문입니다. 대신 에르 고 (Egor)가 말한대로 AnimatedSprite.animate() 방법을 살펴보십시오.

잠과 비슷한 것을 원하면 AndEngine에서 TimerHandler을 사용하십시오. 반복 타이머를 받으려면 falsetrue으로 변경하십시오.

TimerHandler my_timer = new TimerHandler(10, false, 
    new ITimerCallback() { 
     @Override 
     public void onTimePassed(final TimerHandler pTimerHandler) { 
      // Do your thing  
     } 
}); 
scene.registerUpdateHandler(my_timer);