2013-05-15 5 views
1

아래 코드는 "circle"이라는 MovieClip을 만들고 존재하는지 확인하고 removeChild()를 통해 삭제합니다. 그것은 원을 제거했지만 [object MovieClip]은 여전히 ​​존재합니다.as3 자식이 존재하는지 확인 - removeChild();

아이가 "스테이지 상"에 있거나 removeChild를 사용하여 제거되었는지 어떻게 확인할 수 있습니까?

import flash.display.MovieClip; 
import flash.events.MouseEvent; 

var circle:MovieClip = new MovieClip(); 
circle.graphics.beginFill(0xFF794B); 
circle.graphics.drawCircle(50, 50, 30); 
circle.graphics.endFill(); 
addChild(circle); 
circle.addEventListener(MouseEvent.CLICK, test); 

function test(event:MouseEvent) 
{ 
    trace(circle); 
    if(circle) 
    { 
    trace("Called if Circle"); 
    removeChild(circle); 
    } 
    trace(circle); 
} 
+0

표시 객체가 표시 목록에 있는지 확인합니다. contains(). http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#contains%28%29. 완료하려면 객체를 null로 설정하십시오. circle = null; – Urosan

답변

4

확인 circle.stage 특성 :

if(circle.stage) 
    { 
     trace("circle is in display list"); 
     circle.parent.removeChild(circle); //remove circle from display list 
     circle = null //remove reference to the circle, mark it for garbage collection 
    } 
    else 
    { 
     trace("circle isn't in display list"); 
    } 
+0

방금 ​​removeChild (circle)를 사용했습니다. 이것은 내 목적을 위해 작동해야하지만 왜 추적 (원) 창은 사라진 후에 표시됩니까? 그걸 없앨 수 있을까요? 또한이 오류가 발생합니다. TypeError : 오류 # 1009 : null 개체 참조의 속성이나 메서드에 액세스 할 수 없습니다. –

+3

표시 목록에서 _circle_을 제거하면 참조를 삭제할 수 있습니다. 가비지 수집기가 메모리에서 원을 제거하면 _circle = null_로 수동 설정해야합니다. – fsbmain

+1

이상인 경우 stage 대신'parent'를 사용하십시오. 그런 식으로 부모님 중 한 명은 무대에 있지 않더라도 여전히 삭제됩니다. – BadFeelingAboutThis

4

당신은 아마 DisplayObject의 contains 기능을 사용하고 싶습니다.

if (contains(circle)) 
{ 
    // The circle is contained by the current clip 
    removeChild(circle); 
    // Remove the reference to the clip 
    // (optional, if you don't want to use the circle again) 
    circle = null; 
}