http://www.minarto.com/31 이건 전의 글이고.... 거기에 조금 더 덧붙일 것이 생겼다.



스테이지에 mc1, mc2 라는 무비클립을 만들어 놓고 다음의 코드를 집어넣어보자

var tf:TextField = new TextField();
tf.text = "dsfsfasfsafas";
mc1.addChild(tf);


mc1 에 텍스트가 생긴 것을 볼 수 있을 것이다. 그럼 다음의 코드를 추가해보자

var tf:TextField = new TextField();
tf.text = "dsfsfasfsafas";
mc1.addChild(tf);
mc2.addChild(tf);


mc2에는 텍스트 필드가 생기고 mc1 에서 생긴 것을 볼 수 있다.

그렇다면 마지막으로 다음의 코드를 보자

var tf:TextField = new TextField();
tf.text = "dsfsfasfsafas";
mc1.addChild(tf);

mc1.addEventListener(Event.REMOVED, remove);
function remove(e:Event):void
{
 trace(e);
}

mc2.addChild(tf);



이벤트가 발생함을 확인할 수 있을 것이다.

요컨데 이미 addChild 된 디스플레이 오브젝트를 다른 디스플레이 오브젝트에 addChild 하게 되면 자동적으로 removeChild 메소드가 실행된다....는 결론...
크리에이티브 커먼즈 라이선스
Creative Commons License

Tag : addChild, as3, removeChild

removeChild 는 완전한 삭제가 아니다.

Posted 2007/06/08 17:50 by 미나토

뭐 아는 사람은 다 아는 거겠지만... removeChild 메소드 사용시 자주 나올 수 있는 실수를 짚고 넘어가자면...


var sp:Sprite = new Sprite();
addChild(sp);

trace(sp); // [object Sprite]

removeChild(sp);
trace(sp); // [object Sprite]

sp = null;
trace(sp); // null;


위와 같이 removeChild 는 디스플레이 오브젝트에서 빼낸 것 뿐이지 sp라는 Sprite 객체를 완전히 삭제해 버린 것이 아니다.

다음의 코드도 보자

var sp:Sprite = new Sprite();
addChild(sp);
trace(sp); // [object Sprite]

sp = null;
trace(sp); // null;

sp = Sprite(getChildAt(0));
trace(sp); // [object Sprite]

이제 감이 좀 올 것이다.

안 오면 말고...ㅡ.,ㅡa

 

크리에이티브 커먼즈 라이선스
Creative Commons License

Tag : as3, DisplayObject, removeChild