2013-04-23 4 views
0

기존 아이를 바꾸지 않고 버튼을 누를 때마다 스테이지에서 하위 (인스턴스)를 어떻게 추가 할 수 있습니까?AS3 : 기존 자식을 대체하지 않고 버튼을 누를 때마다 스테이지에서 하위 (인스턴스)를 어떻게 추가 할 수 있습니까?

4 가지 클래스가 있습니다 : Symbol1, Symbol3, Symbol4, all.

버튼 인 Symbol3을 누르면 클래스 all.as를 통해 스테이지에서 Symbol1의 인스턴스를 만들고 싶습니다. Symbol4를 사용하여 생성 된 인스턴스 중 하나를 스테이지에서 생성하는 순서대로 삭제하려고합니다. 예 : Symbol3을 세 번 눌렀으며 스테이지에 Symbol1의 인스턴스 세 개를 만들었습니다. 이제 Symbol4를 누르면 처음 만든 인스턴스가 삭제됩니다. 한 번 더 Symbol4를 누르면 두 번째로 생성 된 인스턴스가 삭제됩니다.

public class Symbol3 extends SimpleButton 
{ 
    private var creator:all; 
    private var child:Symbol1 = new Symbol1 ; 
    private var child2:Symbol1 = new Symbol1 ; 
    private var child3:Symbol222 = new Symbol222 ; 

    public function Symbol3() 
    { 
     addEventListener(MouseEvent.CLICK, onCLICK); 
    } 

    private function onCLICK(s:MouseEvent) 
    { 
     creator = new all(child); 
     stage.addChild(creator); 
    } 
} 

.

public class all extends MovieClip 
{ 
    private var _thief1:MovieClip; 

    public function all(par1:MovieClip) 
    { 
     _thief1 = par1; 
     addEventListener(Event.ADDED_TO_STAGE, onADDED_TO_STAGE); 
    } 

    private function onADDED_TO_STAGE(e:Event) 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, onADDED_TO_STAGE); 
     this.addChild(_thief1); 
     _thief1.x = Math.random() * 200; 
     _thief1.y = Math.random() * 200; 
    } 
} 

.

public class Symbol4 extends SimpleButton 
{ 
    public function Symbol4() 
    { 
     addEventListener(MouseEvent.CLICK, onCLICK); 
    } 

    private function onCLICK(s:MouseEvent) 
    { 
     stage.removeChild(?); 
    } 
} 

나는 지금까지 가지고있다. 감사합니다

+0

값 작성자를 반환 한 다음 호출하여 (stage.removeChild (작성자)) 파일을 가져 오십시오. –

+0

'Symbol3'과'Symbol4'는 다소 모호하고 코드를 어설프게 만들기 때문에 의미있는 변수 이름을 사용하는 것이 좋습니다. 어떻게'CreateButton'에 대해? 'DeleteButton'? 'all' 또한 클래스 이름에 대한 모호한 선택입니다. – prototypical

+0

답변 해 주셔서 감사합니다. 이것은 내가 만든 예일뿐입니다.논리에 관한 아이디어가 있다면 고맙겠습니다. 감사합니다 – irnik

답변

0

모든 컨테이너를 하나의 컨테이너에 넣어야합니다. container으로 전화를 걸면됩니다. 다음 추가 단추는 다음과 같이 표시됩니다

private function onCLICK(s:MouseEvent) 
{ 
    container.addChild(new all(new Symbol1())); 
} 

하고 제거 버튼 : 레이어 0에 아이를 제거 할 때

private function onCLICK(s:MouseEvent) 
{ 
    container.removeChildAt(0); 
} 

, 다른 아이들이 한 층 아래로 이동하고 다음 아이에게를 제거는 0에 올 것입니다.

+0

이 답변을 주셔서 감사합니다. 나는 당신의 요지를 가지고 있지만 여전히 기존 아이를 대체하지 않고 다른 아이를 만들 수 없습니다!? 자식을 만들기 위해 버튼을 누를 때마다 기존 자식이 사라집니다. – irnik

+0

기본적으로 버튼을 누를 때마다 새로운 아이가 무대에 등장하기를 원합니다. – irnik

+0

문제는 "자식"MovieClip (par1, 그 다음 _thief1)을 다시 인스턴스화하지 않는다는 것입니다. 나는 내 대답을 편집했다. – Kodiak

0

도움 주셔서 감사합니다 Kodiak!

마침내 만들었습니다. 나는 이것이 올바른 접근법인지는 모르겠지만 적어도 그것이 효과가있다.

나는 세 가지 클래스가 : - Creator.as Ship2.as 버튼 에 연결 - AddChild2.as를 연결이 무비 클립을

까다로운 순간 무대가 오류를 방지 할 수있는 매개 변수로 전송해야한다고했다 : 1009. 다른 생각은 코드를보다 유연하고 독립적으로 만드는 작성자의 빈 생성자 함수입니다. 이제 Creator는 전달 된 모든 무비 클립을 생성 할 수 있습니다. 다시 한 번 나는이 일을하는 또 다른 좋은 방법이 있다고 믿습니다. 그래서 어떤 개선도 환영합니다.


public class AddChild2 extends SimpleButton 
{ 
    private var creatorche:Creator = new Creator; 
    private var s:Ship2; 

    public function AddChild2() 
    { 
     // constructor code 
     addEventListener(MouseEvent.CLICK, onCLICK) 
    } 

    private function onCLICK(e:MouseEvent) 
    { 
     s = new Ship2; 
     creatorche.onCreator(s, stage); 
    } 
} 

.

public class Creator extends MovieClip 
{ 
    private var ship:MovieClip; 

    public function Creator() 
    { 
     // constructor code 
    } 

    public function onCreator(par1:MovieClip, par2:Stage) 
    { 
     ship = par1; 
     par2.addChild(ship); 
     ship.x = Math.random() * 200; 
     ship.y = Math.random() * 200; 
    } 

} 

.

public class Ship2 extends MovieClip 
{ 


    public function Ship2() 
    { 
     // constructor code 
    } 
}