闪存中是不是有一个简单的“删除所有子节点”功能?我不明白为什么这段代码不起作用。我通过以下方式添加孩子:
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);
}
但是我得到一个错误,提供的索引超出范围,但是一个剪辑仍然在舞台上。同样,如果我尝试添加它们没有级别,像这样:
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]);
}
我得到了同样的错误。
答案 0 :(得分:46)
另一个RemoveAllChildren
循环:
while (container.numChildren > 0) {
container.removeChildAt(0);
}
答案 1 :(得分:7)
删除对象时,其他子项的childIndex会被更改。因此,您无法使用i的增加值删除子项,但必须从numChildren-1开始然后减少:
for (var i:int = obj.numChildren-1; i >= 0; i--) {
obj.removeChildAt (i);
}
应该有用。
答案 2 :(得分:6)
sprite.removeChildren();
删除了所有记录为here的孩子。
答案 3 :(得分:2)
这是一个很好的方法来删除所有具有淡入淡出效果的孩子。您需要在类路径中包含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)]
}
);
}
}
}
这一下子就消失了。如果您希望逐个淡出,可以轻松地将delay: i*.2
添加到TweenLite.to
的参数列表中。