2013-03-10 60 views
0

我有一個for循環,用於檢測敵人是否擊中子彈或玩家。那些命中測試工作正常,但當敵人離開舞臺時,我無法弄清楚如何從陣列中移除敵人。當它離開舞臺時從陣列中移除物體AS3

這裏的for循環

for (var i:int = _enemies.length - 1; i >= 0; i--){ 
    for(var j:int = _bullets.length - 1; j >= 0; j--){ 
     if(_bullets[j] != null && _enemies[i] != null){ 
      //Check if bullet hits enemy 
      if(_bullets[j].hitTestObject(_enemies[i])){ 
       //Tells enemy he's hit 
       if (_enemies[i] != null && _bullets[j] != null){ 
         _enemies[i].isHit(_bullets[j].getType()); 

        if(_enemies[i].getHealth() <= 0){ 
         _enemies.splice(i, 1); 
        } 
       } 

       //removes bullet 
       if(_bullets[j] != null){ 
        if (_bullets[j].parent) { 
         _bullets[j].parent.removeChild(_bullets[j]); 
         _bullets.splice(j, 1); 
        } 
       } 
       if(_bullets[j] != null){ 
        if(_bullets[j].x > _stage.stageHeight){ 
         if (_bullets[j].parent) { 
          _bullets[j].parent.removeChild(_bullets[j]); 
          _bullets.splice(j, 1); 
         } 
        } 
        else{ 
         _bullets.splice(j, 1); 
        } 
       } 
      } 

      //Check if player hit 
      else if(_enemies[i] != null && _player != null){ 
       if(_enemies[i].hitTestObject(_player)){ 
        if (_enemies[i] != null){ 
         _enemies[i].isHit("player"); 
         _enemies.splice(i, 1); 
        } 
        else if (_enemies[i] == null){ 
         _enemies.splice(i, 1); 
        } 
       } 
      } 

      if (_enemies[i] != null){ 
       if(_enemies[i].isDead == true){ 
        _enemies.splice(i, 1); 
        } 
       } 
       else if(_enemies[i] != null){ 
       if(_enemies[i].x < 0){ 
        _enemies.splice(i, 1); 
       } 
       } 

       if(_stage.contains(_enemies[i])){ 
       } 
       else{ 
       _enemies.splice(i, 1); 
       } 
      } 
     } 
} 

_stage是從主類級的參考。

回答

0

您卸下子彈

_bullets[j].parent.removeChild(_bullets[j]); 

同樣

_enemies[i].parent.removeChild(_enemies[i]); 

使用它有條件當對象x或y屬性超越階段邊界

對於例如,假設敵人的座標從0,0起開始

// _enemies[i].x > stage.stageWidth 
    // _enemies[i].y > stage.stageHeight 
    // _enemies[i].x +_enemies[i].width < 0 
    // _enemies[i].y + _enemies[i].height < 0 

雖然更好的方法是將一種方法添加到敵人類中,首先刪除其顯示列表中的每個孩子。之後,您可以將其從舞臺&中刪除,最後它是來自陣列的參考。

要取出數組引用簡單地設置數組元素爲空,

_enemies[i] = null; 

垃圾收集器將採取從內存中刪除未被引用的對象的護理。