フラッシュに簡単な「すべての子を削除する」機能はありませんか?このコードが機能しない理由がわかりません。私は次の方法で子供を追加します:
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]);
}
同じエラーが発生します。
さらに別のRemoveAllChildren
ループ:
while (container.numChildren > 0) {
container.removeChildAt(0);
}
オブジェクトを削除すると、他の子のchildIndexが変更されます。したがって、iの値を増やして子を削除することはできませんが、numChildren-1から始めて、次の値を減らす必要があります。
for (var i:int = obj.numChildren-1; i >= 0; i--) {
obj.removeChildAt (i);
}
動作するはずです。
Sprite.removeChildren();
は、文書化されているようにすべての子を削除します ここ 。
これは、フェード効果ですべての子を削除するための優れた方法です。クラスパスに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
を簡単に追加できます。