Ответ 1
Еще один цикл RemoveAllChildren
:
while (container.numChildren > 0) {
container.removeChildAt(0);
}
Не существует ли простая функция "удалить всех детей" во флэш-памяти? Я не понимаю, почему этот код не работает. Я добавляю детей через:
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]);
}
Я получаю ту же ошибку.
Еще один цикл RemoveAllChildren
:
while (container.numChildren > 0) {
container.removeChildAt(0);
}
При удалении объекта дочерние элементы дочерних элементов изменяются. Поэтому вы не можете удалить детей, используя увеличивающееся значение для i, но должны начинаться с numChildren-1, а затем уменьшаться:
for (var i:int = obj.numChildren-1; i >= 0; i--) {
obj.removeChildAt (i);
}
должен работать.
sprite.removeChildren();
удаляет всех детей, как описано здесь.
Здесь хороший способ удалить всех детей с эффектом затухания. Вам нужно включить 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
, если вы хотите, чтобы они постепенно исчезали.