2010-11-04 50 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