2012-10-21 3 views
1

모두.AS3 불릿 제거

나는 그들이 화면을 떠나면 내 총알 인스턴스로 삭제하려고 노력하고있어,하지만 난이 얻을 :

private function manageBullets(event:Event):void { 

    for each(var i in bManager.bulletVector){ 

     if (i.y < -20) { 

      bManager.removeChild(i);  //This line 
      bManager.bulletVector = bManager.bulletVector.splice(bManager.bulletVector.indexOf(i), 1); 

     } 
    } 
} 
:

Error 1061: Call to a possibly undefined method removeChild through a reference with static type __AS3__.vec:Vector.<Bullet>.

이 오류가 지시되는 경우

나는 AS3/OOP에 상당히 익숙하다. 그래서 나를 너무 강하게 비난하지 말라. P

+1

'bManager' 무엇입니까? 총알을 어디에 추가하고 있습니까? 더 많은 코드가 필요합니다. –

답변

2

두 가지 잘못된 일을한다 :

1) 벡터 객체에서 removeChild() 메서드를 호출하려고합니다. removeChild() 하위 메서드는 DisplayObjectContainer 및 하위 클래스에서만 액세스 할 수 있습니다.

2) splice()에 의해 반환되는 bulletVector에 자신의 요소 중 하나를 지정합니다. 따라서이 표현식 bulletVector가 더 이상 벡터가 아니고 글 머리 기호 객체 인 후. bManager의 클래스가 동적으로 정의되어 있지 않으면 "TypeError"를 제공해야합니다.

난 당신의 코드는 다음과 같이한다 같아요

private function manageBullets(event:Event):void { 

    for each(var i in bManager.bulletVector){ 

     if (i.y < -20) { 

      if(i.parent != null) //Check if i is in display list 
      { 
        i.parent.removeChild(i); //Remove i from display list 
      } 

      /* And then just remove i from vector no need to handle returned value.*/ 

      bManager.bulletVector.splice(bManager.bulletVector.indexOf(i), 1); 

     } 
    } 
} 
+0

완벽하게 작동하지만 몇 가지 경우에만 부모 막대를 사용해서는 안된다는 말을 들었습니다. 이것이 예외인가? – David

+1

이 연습을 여러 프로젝트에서 문제없이 사용했지만 어쨌든 부모/컨테이너 DisplayObject에 대한 참조를 유지하고 다음과 같이 확인해야합니다. if (parentDisplayObject.contains (i)) {parentDisplayObject.removeChild (나는); }' – ggat

관련 문제