У меня есть этот GenericPool, который я использую для игры, которую создаю в AndEngine.
public class FruitPool extends GenericPool<Sprite> {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private final TextureRegion mTextureRegion;
// ===========================================================
// Constructors
// ===========================================================
public FruitPool(final TextureRegion pFruitTextureRegion) {
this.mTextureRegion = pFruitTextureRegion;
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
protected Sprite onAllocatePoolItem() {
return new Sprite(0, 0, this.mTextureRegion);
}
@Override
protected void onHandleObtainItem(final Sprite pItem) {
pItem.reset();
}
@Override
protected void onHandleRecycleItem(final Sprite pItem) {
pItem.setVisible(true);
pItem.setIgnoreUpdate(true);
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}
Как вы видите, я предоставляю TextureRegion в пул, чтобы создать спрайт в пуле, как этот ..
FruitPool pool1 = new FruitPool(TextureRegion);
Sprite blueBall = pool1.obtainItem();
Затем я перерабатываю спрайты после того, как они исчезли с экрана, используя
pool1.recyclePoolItem(blueBall);
Проблема в том, что у меня есть таймер, который добавляет спрайт примерно каждые 2 секунды.
Проблема в том, что если спрайт еще не исчез из экрана и не был переработан, я получаю сообщение об ошибке «У Sprite уже есть родитель» в моем Logcat.
Есть ли способ сделать так, чтобы я мог вытянуть из пула столько спрайтов, сколько захочу, а затем перерабатывать каждый из них, когда он уходит с экрана, чтобы позже использовать его?
То, как я сейчас это понял, явно не работает.
Спасибо за помощь, ребята!
РЕДАКТИРОВАТЬ: Также вот метод, где я добавляю спрайты в зависимости от выбранного числа
private void addFace2() {
Random rand = new Random();
Random randFruit = new Random();
if(isGameRunning){
face = null;
int fruitNumber = randFruit.nextInt(6) + 1;
switch(fruitNumber) {
case 1:
//Item 1 code
face = pool1.obtainPoolItem();
this.pool1List.add(face);
break;
case 2:
face = pool2.obtainPoolItem();
this.pool2List.add(face);
break;
case 3:
face = pool3.obtainPoolItem();
this.pool3List.add(face);
break;
//etc. . .
case 4:
face = pool4.obtainPoolItem();
this.pool4List.add(face);
break;
case 5:
face = pool5.obtainPoolItem();
this.pool5List.add(face);
break;
}
this.mFaceCount++;
Log.e("Faces: ", "Face" + this.mFaceCount);
if(face !=null){
int rangeDuration = maxDuration2 - minDuration2;
int actualDuration = rand.nextInt(rangeDuration) + minDuration2;
MoveYModifier mod = new MoveYModifier(actualDuration, face.getY(), mCamera.getHeight());
face.registerEntityModifier(mod);
if(face.hasParent()){
Log.e("Face", "Face has parent");
}else{
this.mScene.attachChild(face);
thump.play();
}
}
}