当从场景中删除我的精灵时,我得到一个超出范围的索引。请注意,我想从Explosion类中删除精灵,以使我的游戏类尽可能“干净”。
这是我创建精灵的地方。
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();
}
});
}
答案 0 :(得分:5)
所以你需要在
中编写代码ResourceManager.getInstance().mEngine.runOnUpdateThread(new Runnable() {
@Override
public void run() {
setIgnoreUpdate(true);
self.clearUpdateHandlers();
self.detachSelf();
}
});
或者您可以使用主要启动Activity UI线程,其中包括Engine& amp;现场。两者都代表相同的任务。喜欢:
BaseActivity.instance.runOnUpdateThread(new Runnable() {
@Override
public void run() {
// do you work here
}
});
要清理游戏场景,请在分离时使用 setIgnoreUpdate(true); 。此外,在创建精灵时使用 SetCullingEnabled(True)。
对于许多精灵创建和分离,然后在运行时使用通用池。
希望,它会帮助你。