flash as3删除所有孩子

时间:2011-02-22 19:32:15

标签: flash actionscript-3 children

闪存中是不是有一个简单的“删除所有子节点”功能?我不明白为什么这段代码不起作用。我通过以下方式添加孩子:

for (var i in project_array[cp].project_type_clips){
        container.header.type_loader.addChildAt(project_array[cp].project_type_clips[i],i);
        loadCount++
    }

然后通过以下方式将其删除:

for (var i in project_array[cp].project_type_clips){
        container.header.type_loader.removeChildAt(i);
    }

但是我得到一个错误,提供的索引超出范围,但是一个剪辑仍然在舞台上。同样,如果我尝试添加它们没有级别,像这样:

for (var i in project_array[cp].project_type_clips){
        container.header.type_loader.addChild(project_array[cp].project_type_clips[i]);
        loadCount++
    }

并删除:

for (var i in project_array[cp].project_type_clips){
        container.header.type_loader.removeChild(project_array[cp].project_type_clips[i]);
    }

我得到了同样的错误。

4 个答案:

答案 0 :(得分:46)

另一个RemoveAllChildren循环:

while (container.numChildren > 0) {
    container.removeChildAt(0);
}

答案 1 :(得分:7)

删除对象时,其他子项的childIndex会被更改。因此,您无法使用i的增加值删除子项,但必须从numChildren-1开始然后减少:

for (var i:int = obj.numChildren-1; i >= 0; i--) {
   obj.removeChildAt (i);
}

应该有用。

答案 2 :(得分:6)

sprite.removeChildren();删除了所有记录为here的孩子。

答案 3 :(得分:2)

这是一个很好的方法来删除所有具有淡入淡出效果的孩子。您需要在类路径中包含TweenLite(或TweenMax)。

它会经过每个孩子,逐渐消失,并在完成时将其从舞台上移除。一旦调用它,立即添加子项是安全的 - 我们可以安全地按升序迭代列表,因为在淡入淡出效果完成之前不会删除任何内容。

fadeOutChildren(myPanel, 3);

以下是代码:

   public function fadeOutChildren(symbol:DisplayObjectContainer, duration:Number=.5):void {

        trace("REMOVING " + symbol.numChildren + " ITEMS");

        if (symbol != null) 
        {
            for (var i:int=0; i<symbol.numChildren; i++) 
            {
                TweenLite.to(symbol.getChildAt(i), duration, 
                    {
                        alpha: 0,

                        onComplete: function(parent:DisplayObjectContainer, child:DisplayObject):void {

                            parent.removeChild(child);                          
                        },

                        onCompleteParams: [symbol, symbol.getChildAt(i)]
                    }               
                );

            }
        }
    }

这一下子就消失了。如果您希望逐个淡出,可以轻松地将delay: i*.2添加到TweenLite.to的参数列表中。