2013-07-22 58 views
3

我使用Andengine創建遊戲,在此我想要一個在天空中飛行的物體在下面放置炸彈。目前我正在使用時間處理程序來創建飛行物體和炸彈。 但它不能正常工作。我面臨的問題是:
1)有時候,而不是一個單一的炸彈2或3個炸彈被丟棄。
2)炸彈對象也沒有得到回收。回收對象的代碼被調用,但它似乎沒有工作。

我注意到一件事情,即假設,最初我有一個飛行物體投下炸彈。當炸彈離開屏幕時,炸彈對象的回收代碼被調用一次。在飛行物離開屏幕後的某個時候,它也會被回收。現在,當另一個飛行物體被創造出來並且炸彈落下時,回收炸彈的代碼就會被召喚兩次。然後,對於第三個飛行物體,回收單個炸彈的代碼被稱爲三次,依此類推。

AndEngine同時移動兩個物體

的代碼添加飛行物體是如下

private void createDragonHandler() { 
    TimerHandler spriteTimerHandler; 
    float mEffectSpawnDelay = 10f; 
    spriteTimerHandler = new TimerHandler(mEffectSpawnDelay, true, 
      new ITimerCallback() { 
       @Override 
       public void onTimePassed(TimerHandler pTimerHandler) { 
        addDragon(); 
       } 
      }); 
    getEngine().registerUpdateHandler(spriteTimerHandler); 
} 


public void addDragon() { 
    Dragon dragon = (Dragon) dragonSpritePool.obtainPoolItem(); 
    if (dragon.getParent() != mainScene) 
     mainScene.attachChild(dragon); 
} 

public synchronized Dragon obtainPoolItem() { 
    dragon = super.obtainPoolItem(); 
    Random rand = new Random(); 
    final int x = (int) (CAMERA_WIDTH + resourceManager.dragonTextureRegion 
      .getWidth()); 
    int minY = (int) resourceManager.dragonTextureRegion.getHeight(); 
    int maxY = (int) (CAMERA_HEIGHT/2 - resourceManager.dragonTextureRegion 
      .getHeight()); 
    int rangeY = maxY - minY; 
    final int y = rand.nextInt(rangeY) + minY; 
    dragon.reset(); 
    dragon.setVisible(true); 
    dragon.setIgnoreUpdate(false); 
    dragon.animate(150); 
    dragon.setPosition(x, y); 
    MoveXModifier mod = new MoveXModifier(15, dragon.getX(), 
      -dragon.getWidth()); 
    float mEffectSpawnDelay = 5f; 
    TimerHandler spriteTimerHandler = new TimerHandler(mEffectSpawnDelay, 
      true, new ITimerCallback() { 
       @Override 
       public void onTimePassed(TimerHandler pTimerHandler) { 
        DragonFire dragonFire = BirdShoot.dragonFireSpritePool 
          .obtainPoolItem(dragon.getX(), dragon.getY()); 
        BirdShoot.mainScene.attachChild(dragonFire); 
       } 
      }); 
    dragon.registerEntityModifier(mod.deepCopy()); 
    dragon.setNoHit(0); 
    PhysicsHandler mPhysicsHandler; 
    mPhysicsHandler = new PhysicsHandler(dragon); 
    dragon.setPhysicsHandler(mPhysicsHandler); 
    dragon.registerUpdateHandler(dragon.getmPhysicsHandler()); 
    BirdShoot.engine.registerUpdateHandler(spriteTimerHandler); 
    return dragon; 
} 


`

+0

我會建議ü張貼在http烏爾問題:// WWW .andengine.org /論壇 – KOTIOS

+0

它已經在那裏http://www.andengine.org/forums/tutorials/binding-two-objects-together-t12520.html,但沒有得到任何迴應:( – Chetna

+0

請看看在一個引擎中的泛型池.. – 2013-07-29 07:08:15

回答

1

稱它爲你在哪裏回收精靈對象編寫代碼?根據你的問題,我看到有些可疑的東西。代碼可能沒有被執行。回收精靈的代碼必須是這樣的: -

public void onHandleRecycleItem(Sprite sprite){ 
    super.onHandleRecycleItem(sprite); 
    // Your code to recycle the object  
} 

還應該使用以下行調用:

yourPool.recyclePoolItem(spriteObject); 
0

沒有看到你的代碼,這將是很難幫助與此有關。但是,這具有未在updateThread上完成的事情的氣味。

你做一些事情,影響AndEngine任何時候,一定要通過

runOnUpdateThread(new Runnable() { 

    @Override 
    public void run() { 
    /* Do your AndEngine changes in here*/ 
    } 
});` 
+0

事情正在更新線程上完成,因爲我沒有得到任何異常。它不像推定的那樣工作。 我已編輯我的問題,包括一些代碼。 – Chetna