AndEngine Generic Pool中的回收实体

时间:2013-01-30 19:53:46

标签: android andengine

我正在使用扩展GenericPool的类来处理sprite的获取和回收。我想做的是在该课程中有一种方法可以在一定时间后回收。类似的东西:

public void recyleIn(Sprite sprite, float durationSeconds) {}

并且有一个方便/花花公子的DelayModifier似乎是实现它的正确方法。所以我们有类似的东西:

public void recyleIn(MySprite mySprite, float durationSeconds) {
    mySprite.registerEntityModifier(
            new DelayModifier(
                    durationSeconds,

    new IEntityModifierListener() {

        @Override
        public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {

        }

        @Override
        public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
            recycle(mySprite);
        }
    }

    ));
}

现在问题是:除非Sprite是“最终的”,否则我无法调用recycle()方法或在那里进行回收。通常这不会是一个问题,我只是做一个“最终的”深度复制并使用它。但在这种情况下,制作副本会破坏池中回收的最初目的。 (例如,如果我打算复制一份,为什么还要先回收并使用池化?)

关于这种事情的正确方法/模型的任何想法?提前谢谢。


更新:

嗯..我刚刚意识到我可以在onModifierFinished()方法中使用IEntity参数。 (由于某些原因,我习惯忽略这些参数。)所以我可以在onModifierFinished()中做这样的事情:

recycle((MySprite) pItem);

我仍然对任何人对最佳方法的看法感到好奇,但我想我可能在这里错过了显而易见的事情。

1 个答案:

答案 0 :(得分:0)

我将继续回答我自己的问题,以帮助处于这种情况的人。简短的回答是,使用IEntity参数而不是其外部的对象是正确的。我这样做的第二个问题是我想在这个方法中将IEntity从场景中分离出来但是,在AndEngine中,重要的是当IEntity与场景分离时它必须在UpdateThread中发生 - 否则你有当场景正在绘制时,有可能出现错误。最终结果如下:

        @Override
        public void onModifierFinished(IModifier<IEntity> pModifier, final IEntity pItem) {
            pool.getContext().runOnUpdateThread(new Runnable() {
                @Override
                public void run() {
                    pItem.detachSelf();
                }
            });

        }

另一个小而重要的点是Ientity参数上的“final”修饰符 - 必要时可以在run()线程中调用它。