2013-07-02 38 views
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(); 

} 

} 

我想知道如何從池中再回收目標的項目,如果我生成新的目標,每次比賽變得那不是你如何從訪問項目緩慢

+0

爲什麼不只是存儲'新的Sprite()'s,而不是總是創造呢?當它們不可用時只創建一次。然後,onAllocatePoolItem()可以簡單地返回存儲的精靈。那是你要的嗎? _PS(另一個提示):考慮重寫爲「公共TargetsPool(ITextureRegion ... pTextureRegion)」,因爲這允許任意數量的ITextureRegion對象作爲數組傳遞。 – ADTC

回答

0

GenericPool。不要叫onAllocatePoolItem()onHandleRecycleItem自己......你叫分別與obtainPoolIem()recyclePoolItem()使用的池功能。您應該閱讀source code

相關問題