2013-04-03 84 views
0

我有兩個精靈BOX & EasyEnemy。他們已經到場了,他們隨機移動。當他們相互碰撞時,我想把容易的敵人作爲BOX精靈的孩子。更改父母的精靈

EasyEnemy來自場景中的通用池。我遍歷所有EasyEnemy內部的BOX sprite onManageUpdate()& BOX sprite像往常一樣創建。

這裏是我的代碼:

private void moveBox() { 
    aBox = new Sprite(0, 0, aResourceManager.boxTexture, vBOM) { 

     @Override 
     protected void onManagedUpdate(float pSecondsElapsed) { 
      // Iterate over all Easy Enemy 
      eIt = getEasyEnemyIterator(); 
      while (eIt.hasNext()) { 
       final EasyEnemy ee = eIt.next(); 
       if (this.collidesWith(ee)) { 
        aResourceManager.mEngine 
          .runOnUpdateThread(new Runnable() { 
           @Override 
           public void run() { 

            ee.clearEntityModifiers(); 
            ee.clearUpdateHandlers(); 
            ee.setIgnoreUpdate(true); 
            ee.reset();          

            ee.setParent(aBox); 
            aBox.attachChild(ee); 

           } 
          }); 

       } 

      } 

      super.onManagedUpdate(pSecondsElapsed); 

     } 

    }; 
    attachChild(aBox); 
    aBox.registerEntityModifier(new MoveModifier(15, 360, 360, 0, 1200)); 
    aBox.setZIndex(9990); 
} 

我有錯誤,如

E/AndroidRuntime(2876): FATAL EXCEPTION: UpdateThread 
E/AndroidRuntime(2876): java.lang.IllegalStateException: pEntity 'EasyEnemy' already has a parent: ''. New parent: ''! 
E/AndroidRuntime(2876):  at org.andengine.entity.Entity.assertEntityHasNoParent(Entity.java:1412) 

回答

2

當我發生碰撞時調用此方法多時間,從而試圖多次附上孩子OA父母和你已經知道一個孩子一次只能有一個父母。 因此,無論您需要更改邏輯,以使碰撞方法只被調用一次,或者您需要在ee.setParent(aBox)之前調用 ee.detachself()。

+0

在ee.setParent(aBox)之前使用ee.detachself()時不會改變; @Jawad Amjad Vai –

+0

添加支票後,我知道了。@ Jawad Amjad Vai。 –