2014-11-16 2 views
0

개체 목록이 있고 목록을 반복하여 충돌을 확인하려고합니다. 이때 모션 트윈이 끝날 때 해당 기능을 제거 할 수있는 지점을 확인합니다. 개체가 실행됩니다.AS3, 목록에서 개체를 제거하는 중 오류가 발생했습니다.

stage.addEventListener(Event.ENTER_FRAME, hitTest); 
function hitTest(e:Event):void 
{ 
    for each (bullet in bullets) 
    { 
     if (bullet.parent == null) 
     { 
      bullets.splice(bullets.indexOf(bullet),1); 
     } 
     else if (bullet.hitTestObject(shark)) 
     { 
      trace("HIT1"); 
      bullet.gotoAndPlay(2); //part that's giving me trouble 
      bullets.splice(bullets.indexOf(bullet),1); 
      trace("HIT"); 
     } 
     else 
     { 
      for each (enemy in enemies) 
      { 
       if (enemy !=null && bullet.hitTestObject(enemy)) 
       { 
        enemies.splice(enemies.indexOf(enemy),1); 
        enemy.remove(); 
        enemy = null; 
        bullets.splice(bullets.indexOf(bullet),1); 
        bullet.remove(); 
        break; 
       } 
      } 
     } 
     } 

여러 가지를 테스트합니다. 오류 번호 : 총알 클래스의 총알 객체의 모션 트윈 설치 완료

stop(); 
this.remove(); 

이 총알 클래스

public function remove() { 
    parent.removeChild(this); 
    this.removeEventListener(Event.ENTER_FRAME, moveMe); 
} 

특정 오류 형식 오류의 제거 기능입니다 1009 : null 개체 참조의 속성이나 메서드에 액세스 할 수 없습니다. 총알에 /()에서 탄환 /frame20 제거() 프레임 (20)은 모션 트윈의 최종 프레임이며, 어떤 도움 ^^

감사 위의 코드를 갖는다.

답변

2

반복하는 배열에서 항목을 제거하면 배열의 길이가 변경되고 오류가 발생할 수 있습니다. 옵션은 배열을 거꾸로 반복하거나 로컬 루프를 사용하여 "for"의 인덱스를 누른 다음 main for 루프가 완료된 후 기본 배열에서 제거를 수행 한 다음 temps 배열을 반복합니다.

토론 및 솔루션 예제에서 비슷한 문제가있는 경우 herehere을 참조하십시오.

관련 문제