如何从舞台中删除一堆动态创建的东西?

时间:2010-11-04 11:01:09

标签: actionscript-3 flash-cs4

我试图一次性从舞台上删除一堆不同的东西。 我有3个动态创建的文本字段和2个动态创建的影片剪辑。 我通过我的文档类购买创建它们,编辑它们的属性然后......将它们添加到舞台上。

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

我想删除它们,我试过......

removeChild(myText1); 

ETC

但这不起作用。 任何人都可以帮助我。

3 个答案:

答案 0 :(得分:2)

如果要从当前对象中删除所有内容,可以执行以下操作:

while (numChildren > 0) removeChildAt(0);

如果你的DisplayObjects在舞台上,你可以这样做:

stage.removeChild(myText1);

答案 1 :(得分:1)

如果您只想删除这些特定对象,那么您需要在某处存储对它们的引用。

另一种解决方案是在创建每个对象时填充.name属性,然后在将来使用该名称来获取对象的引用:

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

addChild(__dynamicMovieClip);

然后在以后的某个时间:

removeChild(getChildByName("foo"));

getChildByName虽然带来了相当多的开销,所以重复调用它或者在当前显示列表是复杂/深度的情况下真的不是一个好主意

答案 2 :(得分: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 ] );
    }
}