2010-11-04 54 views
0

我試圖從舞臺上一次刪除一堆不同的東西。 我有3個動態創建的文本字段和2個動態創建的影片剪輯。 我加入他們的舞臺,通過我的文檔類買他們創造,編輯其屬性,然後...如何從舞臺上刪除一些動態創建的東西?

addChild(myText1); 
addChild(myText2); 
addChild(myText3); 
addChild(myMovieClip1); 
addChild(myMovieClip2); 

我想刪除所有這些,我都試過...

removeChild(myText1); 

ETC

但是這不起作用。 任何人都可以幫助我。

回答

2

如果你想刪除一切從當前的對象,你可以這樣做:

while (numChildren > 0) removeChildAt(0); 

如果您的DisplayObject在舞臺上,你可以這樣做:

​​
+0

雖然它不在一個對象中,它只是在舞臺上。舞臺上還有其他的東西,所以我不想刪除所有的東西,只有3個文本字段和2個動畫片段。 – 2010-11-04 13:35:41

+0

編輯我的答案。如果仍然不起作用,請解釋:您是否有例外?它什麼都不做? – blue112 2010-11-04 15:36:04

+0

我想我的問題是,我不能刪除孩子,因爲他們在一個單獨的函數,而不是一個全局變量,因此我不能從我單獨的方法訪問它們,因爲我無法引用它們。但是,如果他們在舞臺上,就必須有一種方法來訪問他們,所以我想我正試圖找出如何將他們從舞臺上移除。我只是嘗試stage.removeChild(myText1);但我仍然獲得未定義屬性myText1的Access。 – 2010-11-04 23:32:55

1

如果你只是想能夠刪除那些特定的對象,那麼你需要在某處存儲對它們的引用。

另一種解決辦法是,當你創建它來填充每個對象的。名稱屬性,然後使用該名稱在未來某一時間搶對象的引用:

var __dynamicMovieClip:MovieClip = new MovieClip(); 
__dynamicMovieClip.name = "foo"; 

addChild(__dynamicMovieClip); 

然後在一段時間以後:

removeChild(getChildByName("foo")); 

getChildByName帶有相當多的開銷了,所以這真的不是一個好主意,反覆調用它,或者在一個情況下當前顯示列表很複雜/深

+0

謝謝你,我想我可能只需要將它們存儲在全局變量中。 – 2010-11-04 23:34:00

1

您需要爲每個動態創建的對象都有成員變量,以便您可以在創建它們的函數之外引用它們。如果你只需要一個引用來將它們從舞臺上移除,那麼一個數組將很有用。

private var objectsToDelete : Array = []; 

private function someFunction () : void 
{ 
    objectsToDelete.push(myText1); 
    objectsToDelete.push(myText2); 
    objectsToDelete.push(myText3); 
    objectsToDelete.push(myMovieClip1); 
    objectsToDelete.push(myMovieClip2); 
} 

private function removeObjects() : void 
{ 
    var i : int = 0; 
    var max : int = objectsToDelete.length; 
    for (i; i < max; i++) 
    { 
     removeChild(objectsToDelete[ i ]); 
    } 
} 
+0

謝謝,這個作品。 – 2010-11-05 04:50:54