web-dev-qa-db-ja.com

flashas3すべての子を削除します

フラッシュに簡単な「すべての子を削除する」機能はありませんか?このコードが機能しない理由がわかりません。私は次の方法で子供を追加します:

for (var i in project_array[cp].project_type_clips){
        container.header.type_loader.addChildAt(project_array[cp].project_type_clips[i],i);
        loadCount++
    }

次に、次の方法でそれらを削除します。

for (var i in project_array[cp].project_type_clips){
        container.header.type_loader.removeChildAt(i);
    }

しかし、提供されたインデックスが範囲外であるというエラーが表示されますが、それでも1つのクリップがステージに残っています。同様に、次のように、レベルなしでそれらを追加しようとすると、次のようになります。

for (var i in project_array[cp].project_type_clips){
        container.header.type_loader.addChild(project_array[cp].project_type_clips[i]);
        loadCount++
    }

削除します:

for (var i in project_array[cp].project_type_clips){
        container.header.type_loader.removeChild(project_array[cp].project_type_clips[i]);
    }

同じエラーが発生します。

10
mheavers

さらに別のRemoveAllChildrenループ:

while (container.numChildren > 0) {
    container.removeChildAt(0);
}
46
splash

オブジェクトを削除すると、他の子のchildIndexが変更されます。したがって、iの値を増やして子を削除することはできませんが、numChildren-1から始めて、次の値を減らす必要があります。

for (var i:int = obj.numChildren-1; i >= 0; i--) {
   obj.removeChildAt (i);
}

動作するはずです。

7
weltraumpirat

Sprite.removeChildren();は、文書化されているようにすべての子を削除します ここ

6
Narek

これは、フェード効果ですべての子を削除するための優れた方法です。クラスパスにTweenLite(またはTweenMax)を含める必要があります。

それは各子を通過し、フェードアウトし、完了するとステージから削除されます。これが呼び出されたらすぐに子を追加しても安全です。フェード効果が完了するまで何も削除されないため、リストを昇順で安全に繰り返すことができます。

fadeOutChildren(myPanel, 3);

コードは次のとおりです。

   public function fadeOutChildren(symbol:DisplayObjectContainer, duration:Number=.5):void {

        trace("REMOVING " + symbol.numChildren + " ITEMS");

        if (symbol != null) 
        {
            for (var i:int=0; i<symbol.numChildren; i++) 
            {
                TweenLite.to(symbol.getChildAt(i), duration, 
                    {
                        alpha: 0,

                        onComplete: function(parent:DisplayObjectContainer, child:DisplayObject):void {

                            parent.removeChild(child);                          
                        },

                        onCompleteParams: [symbol, symbol.getChildAt(i)]
                    }               
                );

            }
        }
    }

これは一度にフェードアウトします。パラメータを1つずつフェードアウトさせたい場合は、delay: i*.2のパラメータリストにTweenLite.toを簡単に追加できます。

2
Simon_Weaver