0

所以,我使用这段代码从我的舞台上删除了几个电影剪辑:

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 个影片剪辑要删除,它们都是动态添加的,当添加这些影片剪辑时,我将其插入到这个数组“pecasInGame”中,当有五个时我尝试使用删除上述循环。

问题是,它只删除了 0、2 和 4 个对象中的 3 个。循环中甚至没有列出 1 和 3。知道为什么会这样吗?

4

2 回答 2

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]);
}
于 2012-05-04T15:38:54.717 回答
1

问题是您正在迭代孩子并同时删除,所以孩子的索引正在改变,这导致了问题。

如果要从显示列表中删除所有影片剪辑,请执行以下操作:

for each(var mc:MovieClip in pecasInGame)
{
     if(getChildIndex(mc) != -1)
         removeChild(mc);
}
于 2012-05-04T15:16:51.770 回答