因此,我正在使用此代码从我的舞台中删除几个影片剪辑:
for (var i:uint = 0; i < this.numChildren; i++)
{
if (this.getChildAt(i) is MovieClip
&& pecasInGame.indexOf(this.getChildAt(i)) >= 0)
{
removeChild(this.getChildAt(i));
}
}
但它不是很好用...我有5个影片剪辑要删除它们都是dinamically添加,当这些影片剪辑添加后我插入到这个数组“pecasInGame”,当有五个然后我尝试使用上述循环删除。
问题是,它只删除了3个,0个,2个和4个对象.. 1和3甚至没有在循环中列出。知道为什么会这样吗?
答案 0 :(得分:2)
您正在删除显示对象,因此索引在循环继续时会发生变化。 改变方式:
for (var i:uint = this.numChildren-1; i >= 0 ; i--)
{
if (this.getChildAt(i) is MovieClip && pecasInGame.indexOf(this.getChildAt(i)) >= 0)
{
removeChild(this.getChildAt(i));
}
}
其他选项:使用您的数组删除对象,例如
for (var i:int=0; i<pecasInGames.length; i++) {
removeChild (pecasInGames[i]);
}
答案 1 :(得分:1)
问题是你在迭代孩子并同时删除,所以孩子的索引正在改变,这导致了问题。
如果要从显示列表中删除所有影片剪辑,请执行以下操作:
for each(var mc:MovieClip in pecasInGame)
{
if(getChildIndex(mc) != -1)
removeChild(mc);
}