嘿伙计们,我的页面出现了问题。所以我创建了5个页面,每个页面包含几个影片剪辑(文本,图形,表格等)。但是有一个特定页面包含自动生成的内容。精灵。如果我碰巧落在这个页面上,精灵会出现,但是当我转换到另一个页面时,它们仍然存在,除了非精灵的东西(消失)。我在这个上扯掉我的头发,我设法让一些精灵去除,但有些仍在出现。下面显示了未被删除的布局;
var container:Sprite = new Sprite();
//loop places several "item" in this container sprite and a scroll bar
var item:myItem = new myItem();
var sb:customScrollBar = new customScrollBar();
container.addChild(item);
container.addChild(sb);
所以我们现在在这个页面上生成容器和项目,然后单击一个按钮移动以说出主页,容器仍然停留在那里。
这是我试过的:
removeChild(container); //nothing, this was called from another keyframe where the container was not generated from
stage.removeChild(container); //nothing
以下是错误。 ArgumentError:错误#2025:提供的DisplayObject必须是调用者的子级。
注* 我也有几个按钮也不是像下面那样生成在容器内部,当我运行removeChild(button1)时它们工作,所以我不知道为什么容器一个不工作。
答案 0 :(得分:1)
如果您遵循
,您将不会收到参数错误2025//initialization
var container:Sprite = new Sprite();
......
......
addChild(container);
//------- later
if(contains(container))
removeChild(container);
无需创建名称,这是保证将sprite或DisplayObject添加到DisplayList中。那么你不会得到一个y ArgumentError 2025。
答案 1 :(得分:0)
类似的事发生在我之前,我通过以下方式解决了这个问题。这取决于我创建的容器实例的方式,因此也被父级识别。
var container:Sprite = new Sprite(); container.name = "container"; //------- later var child:DisplayObject = getChildByName("container"); removeChild(child);
如果你需要删除所有孩子,你也可以这样做
while( this.numChildrem > 0 ) this.removeChildAt(0);
答案 2 :(得分:0)
这可能是由于这样一个事实,即对于时间轴动画,任何给定的关键帧都可能包含一个对象,但是对于每个关键帧操作列表,您将失去先前关键帧内容的范围。因此,如果在跨越新的时间轴关键帧之前调用remove child,则可能能够成功调用容器上的removeChild。
否则,您可以利用Patrick的建议,它肯定会在舞台上找到对象并将其删除,尽管它是从显示列表中检索对象的效率较低的方法之一。