2012-05-04 107 views
0

所以,使用im這個代碼從我的舞臺中刪除了幾個電影片段:問題越來越對象在舞臺

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,當這些movieclip被添加我插入然後到這個數組「pecasInGame」,當有五個然後我嘗試刪除使用上述循環。

問題是,它只消除了3,然後,0,2和4對象。1和3都沒有列出在循環中。任何想法爲什麼會發生?

回答

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]); 
} 
+0

我愛你的男人!多謝!這真是太明顯了,我現在真的感到慚愧,哈哈 –

1

問題是你正在迭代孩子並在同一時間刪除,所以孩子的指數正在改變,這是導致問題。

如果你想從顯示列表中刪除所有的影片剪輯,做這樣的事情:

for each(var mc:MovieClip in pecasInGame) 
{ 
    if(getChildIndex(mc) != -1) 
     removeChild(mc); 
}