Этот код будет работать:
while(container.numChildren > 0)
{
container.removeChildAt(0);
}
Однако я хотел указать, что не так с этим циклом, чтобы вы понимали, что происходит. Добавьте трассировку, которую я добавил в ваш код ниже, в ваш код. :
for(var i:int=0;i<container.numChildren;i++)
{
trace (i + " : " + container.numChildren);
var currImg:Sprite = container.getChildAt(i) as Sprite;
container.removeChild(currImg);
}
Вы увидите, что с каждым циклом число детей уменьшается, как и ожидалось.
Но вам нужно понять, что при удалении дочернего элемента список отображения контейнера изменяется очень существенно.
Вот пример того, как ваш список отображения мог бы выглядеть перед запуском цикла - число, которое я имею в начале, это их позиция в списке отображения контейнера.
0-cat
1-dog
2-bird
3-cow
4-elephant
5-clown
Теперь, когда вы в первый раз проходите цикл, вы удаляете cat, поскольку его местоположение равно 0 в списке отображения. Вот как выглядит список отображения:
0-dog
1-bird
2-cow
3-elephant
4-clown
Обратите внимание, что индексы списка отображения сместились в зависимости от удаленного дочернего элемента. Не может быть пробелов в списке отображения по дизайну.
Итак, в следующий раз в цикле значение i будет 1 - верно? Это означает, что «птица» будет удалена из списка отображения, в отличие от собаки, что вы могли ожидать.
так вот список отображения после этого в следующий раз в цикле:
0-dog
1-cow
2-elephant
3-clown
Так что да. Многие из этих решений будут работать. В этом случае я бы рекомендовал цикл while. Но я думаю, что реальным знанием, которое можно получить из этого вопроса, является понимание проблемы.