Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   удаление потомков через цикл (http://www.flasher.ru/forum/showthread.php?t=150949)

TexHuK 20.02.2011 10:38

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

Код AS3:

        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: Предоставленный индекс выходит за допустимые пределы.

ругается именно на
Код AS3:

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

середина
по мере удаления объектов размер массива уменьшается

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

Код AS3:

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


TexHuK 20.02.2011 10:48

Цитата:

Сообщение от mikhailk (Сообщение 974768)
середина
по мере удаления объектов размер массива уменьшается

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

Код AS3:

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


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


Часовой пояс GMT +4, время: 15:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.