PDA

Просмотр полной версии : удаление потомков через цикл


TexHuK
20.02.2011, 10:38
Пытаюсь удалить объекты из контейнера через цикл, т. е. сделать очистку сцены, и не могу понять почему происходит ошибка на 53-й итерации


trace("zc "+zombieContainer.numChildren);
containerObject = zombieContainer.numChildren;
trace("co1 "+containerObject);
for (i = 0; i < containerObject; i++)
{
var zombieContainerZ:zombieMc = zombieContainer.getChildAt(i) as zombieMc;

zombieContainer.removeChild(zombieContainerZ);//удалим его из контейнера
trace("co for " + containerObject);
trace("i " + i);
trace("object "+zombieContainerZ);
}


результаты трейса

zc 0
co1 0
zc 107
co1 107
co for 107
i 0
object [object zombieMc]
co for 107
i 1
object [object zombieMc]
co for 107
.....
i 52
object [object zombieMc]
co for 107
i 53
object [object zombieMc]
[Fault] exception, information=RangeError: Error #2006: Предоставленный индекс выходит за допустимые пределы.


ругается именно на

var zombieContainerZ:zombieMc = zombieContainer.getChildAt(i) as zombieMc;

в чем причина? вроде в контейнере zombieContainer столько объектов, скалько указанно на момент входа в цикл.. и почему именно на 53? ктати, один момент, если объектов 107, то 53, если 106, то 52-я итерация с ошибкой. Что не так?

i.o.
20.02.2011, 10:42
с конца нужно идти, с конца...

mikhailk
20.02.2011, 10:44
середина
по мере удаления объектов размер массива уменьшается

вот правильный код:


while(zombieContainer.numChildren) zombieContainer.removeChildAt(0);

TexHuK
20.02.2011, 10:48
середина
по мере удаления объектов размер массива уменьшается

вот правильный код:


while(zombieContainer.numChildren) zombieContainer.removeChildAt(0);


гениально!!
благодарю :yahoo:
все работает как надо!