このコードは機能します:
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
これで、ループを初めて通過するときに、猫を削除します。これは、猫の位置がディスプレイリストで0であるためです。表示リストは次のようになります。
0-dog
1-bird
2-cow
3-elephant
4-clown
削除された子に基づいて、ディスプレイリストのインデックスがシフトしていることに注意してください。設計上、ディスプレイリストにギャップを設けることはできません。
したがって、次にループを通過するとき、iの値は1-ですよね?つまり、犬とは対照的に、「鳥」が表示リストから削除されます。これは、予想していたことです。
次回ループを通過した後の表示リストは次のとおりです。
0-dog
1-cow
2-elephant
3-clown
あ、はい。これらのソリューションの多くは機能します。この場合、whileループをお勧めします。しかし、この質問から得られる本当の知識は、問題を理解することだと思います。