我正在使用一个扩展 GenericPool 的类来处理精灵的获取和回收。我想做的是在该类中有一个方法可以在一定时间后回收。就像是:
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);
我仍然会对任何人对最佳方法的想法感到好奇,但我想我可能只是错过了这里显而易见的事情。