Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
flash as3删除所有子项_Flash_Actionscript 3_Children - Fatal编程技术网

flash as3删除所有子项

flash as3删除所有子项,flash,actionscript-3,children,Flash,Actionscript 3,Children,flash中不是有一个简单的“删除所有子项”功能吗?我不明白为什么这个代码不起作用。我通过以下方式添加儿童: 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

flash中不是有一个简单的“删除所有子项”功能吗?我不明白为什么这个代码不起作用。我通过以下方式添加儿童:

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]);
    }

我得到了同样的错误。

当您删除一个对象时,其他子对象的childIndex会被更改。因此,不能使用i的递增值删除子项,但必须从numChildren-1开始,然后再递减:

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

应该可以工作。

还有另一个
删除所有儿童
循环:

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

这里有一个很好的方法,可以通过淡入淡出效果移除所有的孩子。您需要在类路径中包含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)]
                    }               
                );

            }
        }
    }
公共函数淡出子对象(符号:DisplayObjectContainer,持续时间:Number=.5):无效{
跟踪(“删除”+symbol.numChildren+“项目”);
如果(符号!=null)
{

for(var i:int=0;i
sprite.removeChildren();
删除所有记录的子项。

@Matt:你说得对,它显然应该是说
i>=0
。谢谢你找到输入错误:)ah-未能意识到随着剪辑被删除,级别将发生变化。注意:numChildren是在“DisplayObjectContainer”上定义的,因此您需要具有该类型或子类的类。例如,您不能为“DisplayObject”执行此操作,但它将适用于“Sprite”:对于后代,此方法现在已被弃用。现在我们有了
removeChildren()
。请注意,removeChildren()仅适用于FP11及以后版本。