0

スプライトとアニメーションスプライトを使用しています。アニメーション スプライトを 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();

        }
}
4

2 に答える 2

2

Thread.sleep()他のすべての更新と再描画がブロックされるため、更新スレッドでは使用しないでください。代わりに、AnimatedSprite.animate()エゴールが言ったようにメソッドを調べてください。

スリープに似たものが必要な場合はTimerHandler、AndEngine で s を使用します。繰り返しタイマーを取得するには、 に変更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);
于 2011-08-04T16:01:29.107 に答える
2

フレーム持続時間も定義されたからへのフレーム変更のループを行うメソッドがあるためAnimatedSpriteです。これがあなたが探しているものだと感じています。sprite.animate(long[] pFrameDurations, int pFirstTileIndex, int pLastTileIndex, int loopCount)loopCountpFirstTileIndexpLastTileIndex

于 2011-08-01T06:41:38.583 に答える