flash as3 удалить всех детей - PullRequest
       18

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

10 голосов
/ 22 февраля 2011

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

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 ]

46 голосов
/ 22 февраля 2011

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

while (container.numChildren > 0) {
    container.removeChildAt(0);
}
7 голосов
/ 22 февраля 2011

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

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

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

6 голосов
/ 04 ноября 2013

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

2 голосов
/ 21 марта 2011

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

...