2013-05-15 136 views
1

下面的代碼創建一個名爲「circle」的MovieClip,並檢查它是否存在並通過removeChild()刪除它;它刪除了圓,但[對象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。要完全刪除對象,請將其設置爲空。 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:無法訪問空對象引用的屬性或方法。 –

+3

您只需從顯示列表中刪除_circle_,要刪除對它的引用,您應手動設置_circle = null_,然後垃圾收集器將從內存中刪除該圓。 – fsbmain

+1

或更好,然後使用'parent'而不是stage。這樣即使其中一位父母不在舞臺上,它仍然會被刪除。 – 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; 
}