用于动画的Thread.sleep(Andengine)

时间:2011-08-01 05:33:10

标签: android andengine

我正在使用精灵和动画精灵。我使用动画精灵16帧。用于左,右,上,下和最后4帧的爆炸动画。

//animSprite.setCurrentTileIndex(leftCount);

当动画精灵与精灵碰撞时..我想显示最后4帧,持续5秒。如何使用andengine。我尝试使用Thread.sleep,但它不起作用。

//对于我正在使用的更新

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

            }

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

我能在logcat中获得最后4帧数。但是屏幕没有更新..

如何刷新场景。

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 个答案:

答案 0 :(得分:2)

对于AnimatedSprite,您有一个sprite.animate(long[] pFrameDurations, int pFirstTileIndex, int pLastTileIndex, int loopCount)方法,可以loopCount从[{1}}更改为pFirstTileIndex的{​​{1}}个循环,并且还会定义帧持续时间。我觉得这就是你要找的东西。

答案 1 :(得分:2)

您不应在更新线程中使用Thread.sleep(),因为这会阻止所有其他更新并重新绘制。而是像Egor所说的那样研究AnimatedSprite.animate()方法。

如果你想要类似睡眠的东西,那么在AndEngine中使用TimerHandler。将false更改为true以获得重复计时器。

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