Flash as3 удалить всех детей

Не существует ли простая функция "удалить всех детей" во флэш-памяти? Я не понимаю, почему этот код не работает. Я добавляю детей через:

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

Я получаю ту же ошибку.

Ответ 1

Еще один цикл RemoveAllChildren:

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

Ответ 2

При удалении объекта дочерние элементы дочерних элементов изменяются. Поэтому вы не можете удалить детей, используя увеличивающееся значение для i, но должны начинаться с numChildren-1, а затем уменьшаться:

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

должен работать.

Ответ 3

sprite.removeChildren(); удаляет всех детей, как описано здесь.

Ответ 4

Здесь хороший способ удалить всех детей с эффектом затухания. Вам нужно включить 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, если вы хотите, чтобы они постепенно исчезали.