スプライトの取得とリサイクルを処理するために 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);
最良のアプローチについての誰かの考えにまだ興味がありますが、ここで明らかなことを見逃した可能性があると思います.