Flash/Action Script

얼사마 2011. 1. 10. 16:16

Sprite를 상속받은 class라면,

어디서건 addChild 메소드를 사용할 수 있다.


대게 addChild하게 되면,

화면상에 보여질 display list에 들어가게 된다.


그리고 addChild된 객체는 copy되는 것이 아니라 reference를 참조하여,

해당 객체가 어디에 속해서 보여줄 지 정해지는 것.


예를 들어.


var sp1:Sprite = new Sprite();

var parent1:Sprite = new Sprite();

var parent2:Sprite = new Sprite();

parent1.addChild(sp1);

parent2.addChild(sp1);


이렇게 하게 되면, 결국 sp1이라는 객체는

parent2에 속하게 되고, parent1과는 아무런 관련이 없어진다.


기존의 parent1의 display list에서 삭제되고,

parent2에 추가되어,

parent1에서는 더이상 보이지 않는 것이 정상이고, 일반적인 경우이다.


그런데.

parent1은 실제 화면상에 뿌려지고 있는 display object이고,

parent2는 메모리상에 존재하는 display object일 때,

sp1이 최종적으로는 parent2에 addChild됐음에도 불구하고,

parent1에 잔상처럼 sp1의 이미지가 남는 경우가 있다.


해당 display object의 이동(?)이 있었음에도,

화면상에 업데이트를 시켜주지 않는 것.


이럴 경우, 반드시 기존에 속해 있던 parent에서 removeChild를 해주어야 한다.

위 예제의 경우 


parent1.addChild(sp1);

parent1.removeChild(sp1);

parent2.addChild(sp1);


뭐... 꽁수지만 다른 방법으로는,

화면상에 노출이 될 수 있도록(stage의 display list에 들어가도록),

addChild를 해주고, 해당 display object의 visible=false로 처리하면 해결이 된다.