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」に挿入し、5つある場合は、を使用して削除しようとします。前述のループ。

問題は、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 に答える