此代码将起作用:
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 循环。但我认为从这个问题中获得的真正知识是理解问题。