flash as3删除所有子项
flash中不是有一个简单的“删除所有子项”功能吗?我不明白为什么这个代码不起作用。我通过以下方式添加儿童:flash as3删除所有子项,flash,actionscript-3,children,Flash,Actionscript 3,Children,flash中不是有一个简单的“删除所有子项”功能吗?我不明白为什么这个代码不起作用。我通过以下方式添加儿童: 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
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]);
}
我得到了同样的错误。当您删除一个对象时,其他子对象的childIndex会被更改。因此,不能使用i的递增值删除子项,但必须从numChildren-1开始,然后再递减:
for (var i:int = obj.numChildren-1; i >= 0; i--) {
obj.removeChildAt (i);
}
应该可以工作。还有另一个
删除所有儿童
循环:
while (container.numChildren > 0) {
container.removeChildAt(0);
}
这里有一个很好的方法,可以通过淡入淡出效果移除所有的孩子。您需要在类路径中包含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)]
}
);
}
}
}
公共函数淡出子对象(符号:DisplayObjectContainer,持续时间:Number=.5):无效{
跟踪(“删除”+symbol.numChildren+“项目”);
如果(符号!=null)
{
for(var i:int=0;isprite.removeChildren();
删除所有记录的子项。@Matt:你说得对,它显然应该是说i>=0
。谢谢你找到输入错误:)ah-未能意识到随着剪辑被删除,级别将发生变化。注意:numChildren是在“DisplayObjectContainer”上定义的,因此您需要具有该类型或子类的类。例如,您不能为“DisplayObject”执行此操作,但它将适用于“Sprite”:对于后代,此方法现在已被弃用。现在我们有了removeChildren()
。请注意,removeChildren()仅适用于FP11及以后版本。