0
我開發使用andengine遊戲中,我使用通用池的型動物精靈 池回收項目,現在我的遊戲類似水果忍者在水果上彈出屏幕,但之後的某個或15分鐘後比賽慢變得像我使用如何從被預先生成
TargetPool tPool;
tPool = new TargetsPool(apple,watermelon,lemon,mango,tomato);
target=tPool.onAllocatePoolItem();
tPool.onHandleRecycleItem(target);
public class TargetsPool extends GenericPool<Sprite> {
private ITextureRegion mTextureRegion, mTextureRegion1,mTextureRegion2, mTextureRegion3,mTextureRegion4;
public TargetsPool(ITextureRegion pTextureRegion1,ITextureRegion pTextureRegion2,ITextureRegion pTextureRegion3,ITextureRegion pTextureRegion4,ITextureRegion pTextureRegion5) {
if (pTextureRegion1 == null&&pTextureRegion2 == null) {
throw new IllegalArgumentException(
"The texture region must not be NULL");
}
mTextureRegion = pTextureRegion1;
mTextureRegion1 = pTextureRegion2;
mTextureRegion2 = pTextureRegion3;
mTextureRegion3 = pTextureRegion4;
mTextureRegion4 = pTextureRegion5;
}
@Override
protected Sprite onAllocatePoolItem() {
Random r = new Random();
int a =r.nextInt(5);
//Log.e(Integer.toString(a),"a");
Sprite sprite;
VertexBufferObjectManager getvertex = null;
switch(a){
case 0:
sprite =new Sprite(0, 0, mTextureRegion,getvertex);
break;
case 1:
sprite =new Sprite(0, 0, mTextureRegion1,getvertex);
break;
case 2:
sprite =new Sprite(0, 0, mTextureRegion2,getvertex);
break;
case 3:
sprite =new Sprite(0, 0, mTextureRegion3,getvertex);
break;
case 4:
sprite =new Sprite(0, 0, mTextureRegion4,getvertex);
break;
default:sprite =new Sprite(0, 0, mTextureRegion,getvertex);
}
return sprite;
}
protected void onHandleRecycleItem(final Sprite target) {
target.clearEntityModifiers();
target.clearUpdateHandlers();
target.setVisible(false);
target.detachSelf();
target.reset();
}
}
我想知道如何從池中再回收目標的項目,如果我生成新的目標,每次比賽變得那不是你如何從訪問項目緩慢
爲什麼不只是存儲'新的Sprite()'s,而不是總是創造呢?當它們不可用時只創建一次。然後,onAllocatePoolItem()可以簡單地返回存儲的精靈。那是你要的嗎? _PS(另一個提示):考慮重寫爲「公共TargetsPool(ITextureRegion ... pTextureRegion)」,因爲這允許任意數量的ITextureRegion對象作爲數組傳遞。 – ADTC