2013-03-10 2 views
0

적 (Enemy)이 총알이나 플레이어를 때리는지를 감지하는 for 루프가 있습니다. 이 히트 테스트는 정상적으로 작동하지만 적군이 무대에서 벗어날 때 적으로부터 어레이를 제거하는 방법을 알 수 없습니다.배열에서 개체를 제거 할 때 AS3

여기

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 메인 클래스 스테이지의 기준이다 for 루프이다.

답변

0

당신은 제거 총알

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

마찬가지로

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

사용하여 그 개체의 X 또는 Y 속성이 원수의 좌표를 가정, 무대의 경계 예를 들어

넘어 조건부 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; 

가비지 컬렉터는 메모리로부터 참조되지 않는 객체들을 제거 돌볼 것이다 배열 참조는 단순히 널 (null)로 배열 요소를 설정 제거.

관련 문제