2011-03-25 2 views
1

나는 학교에서 간단한 플래시 게임을 진행하고 있습니다. 한 수준에서 여러 개의 적을 생성하고 플레이어가 그들을 쏘라고되어 있습니다. 나는 총에 맞은 적을 없애기 위해 removeChild()를 사용했지만 적을 클릭 (적중)하면 무대의 모든 것이 제거됩니다. 그것은 완전히 비어 있습니다. 그것을 제거 왜 여기 혼란의AS3 - removeChild()가 무대에서 모든 것을 제거합니다.

public function getroffen(evt:MouseEvent):void{ 
      trace("hit"); 
      this.parent.removeChild(this); 

} 

종류 : 적을 맞았 경우

private function Game2():void{ 
    for (var i:uint=0; i<50; i++) { 

     var man:MovieClip = new man_mc(); 
     man.x=Math.random()*750; 
     man.y=Math.floor(Math.random()*(70))+350; 
     addChild(man); 
     man.addEventListener(MouseEvent.CLICK, getroffen); 
    } 

기능 'getroffen'검사 : 적 내 무대를 채울 수

기능은 다음과 같다 무언가를 클릭하는 대신에 무대 위의 모든 것. 어떤 도움이 필요합니까? 고마워.

답변

7

에 따라 달라집니다. getroffen()이 해당 클래스를 제거하고 있습니다 (this은 현재 범위 개체를 가리 킵니다). 따라서 아마도 Main 클래스 일 것입니다.

var man:MovieClip = evt.target as MovieClip; 
man.parent.removeChild(man); 
+0

감사. 이것은 잘 작동합니다. Tim S가 제공 한 코드의 차이점을 설명해 주시겠습니까? 나는 당신의 코드보다 당신의 코드가 더 좋다고 생각하지만, 둘 다 속임수를 쓰는 것처럼 보입니다. – cabaret

+0

둘 다 기능적으로 동일합니다. 유일한 차이점은'target' 매개 변수 대신'currentTarget' 매개 변수 (아마도 더 낫다)를 사용한다는 것입니다. 차이점은 이벤트 모델이 작동하는 방식과 이벤트 리스너를 등록한 대상에 달려 있습니다. 내가하고있는 일은 목표물을 'MovieClip'으로 캐스팅하는 것입니다 (null인지 확인한 다음 원하는 경우 반환 할 수 있습니다). 그리고 나서 부모를 호출하여 제거합니다. 'DisplayObject'를 다른 것에 추가하면, 그것은 그 객체의 자식이되고'parent' 매개 변수가 설정됩니다. obj.parent.removeChild (obj)를 사용하면 쉽게 제거 할 수 있습니다. – divillysausages

+0

'target'과'currentTarget'의 차이점은 플래시의'Event' 모델은 캡처 단계, 이벤트 단계 , 버블 링 단계. display리스트에있는 객체가 이벤트를 보내면'Stage-> parent-> parent-> parent-> child'가됩니다. 여기서'child'는 이벤트를 전달한 객체이고'parent'는 부모입니다. DisplayObject' 모든 '무대'까지. 우리가 포착 단계에있는 마지막 부모가 될 때까지. 우리가'자식 '에 도달하면, 우리는 사건 단계에 있습니다. 그 후, 이벤트는 다시 '스테이지'로 되돌아갑니다. – divillysausages

3

대신 this.parent.removeChild(this) 시도 :

evt.currentTarget.parent.removeChild(evt.currentTarget); 

트릭을 할해야합니다!

이벤트 (mouseEvent)는 적군의 '자식'이므로 마우스 이벤트의 대상을 제거하면 적을 제거합니다.

+0

감사 :

당신은 당신의 삭제 기능에서 같은 것을 할 필요가있다. 그것은 트릭을했다. 코드가 실제로 무엇을 의미하는지 설명해 주시겠습니까? evt.currentTarget을 이해하지만 '부모'의 출처를 모르겠습니다. 나머지도 이해하기 쉽습니다. 고마워요! – cabaret

+1

나는이 사과에 대해 더 일찍 대답하지 않았다. MouseEvent의 "currentTarget"은 EventListener를 할당 한 객체입니다. 내가 그 객체를 삭제하기를 원하기 때문에, 나는 그 객체를 삭제하기 위해서 부모 객체에 먼저 접근해야한다. –

관련 문제