在Stage中获取对象的问题

时间:2012-05-04 15:08:31

标签: actionscript-3 flash loops

因此,我正在使用此代码从我的舞台中删除几个影片剪辑:

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甚至没有在循环中列出。知道为什么会这样吗?

2 个答案:

答案 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);
}