シーンからスプライトをデタッチすると、インデックスが範囲外になります。ゲームクラスをできるだけ「クリーン」に保つために、爆発クラスからスプライトを削除したいことに注意してください。
ここでスプライトを作成します。
mScene.registerUpdateHandler(new IUpdateHandler() {
public void onUpdate(float pSecondsElapsed) {
if(something) {
final Explosion expl = new Explosion(m.getX(), m.getY(),
getVertexBufferObjectManager(), false, 65);
mScene.attachChild(expl);
}
}
});
アニメーション終了時にスプライトを削除する爆発クラス
public class Explosion extends AnimatedSprite {
private final Explosion self;
public Explosion(float pX, float pY, VertexBufferObjectManager pVertexBufferObjectManager,
boolean loopAnimation, long frameDurationEach) {
super(pX, pY, regExplosion, pVertexBufferObjectManager);
this.self = this;
this.animate(frameDurationEach, loopAnimation, new IAnimationListener() {
@Override
public void onAnimationStarted(AnimatedSprite pAnimatedSprite,
int pInitialLoopCount) {
}
@Override
public void onAnimationLoopFinished(AnimatedSprite pAnimatedSprite,
int pRemainingLoopCount, int pInitialLoopCount) {
}
@Override
public void onAnimationFrameChanged(AnimatedSprite pAnimatedSprite,
int pOldFrameIndex, int pNewFrameIndex) {
}
@Override
public void onAnimationFinished(AnimatedSprite pAnimatedSprite) {
self.clearUpdateHandlers();
self.detachSelf();
self.dispose();
}
});
}