0

几个月前我刚刚学习了 AS3,如果这对你来说听起来很新手,我很抱歉。

这是我的问题。我去使用removeChild,但是有一个错误说:ArgumentError:错误#2025:提供的DisplayObject必须是调用者的孩子。

所以,我追踪了父母,它是“空的”。但是当我试图追踪我拥有的每个对象的父对象时,结果还不错。那为什么突然变成null了?并且随机!你知道如何纠正这个吗?谢谢。

4

4 回答 4

1

以下是我如何防范错误 #2025:

if ( container.contains( displayObject ) )
    container.removeChild( displayObject );

但一般来说,请务必只删除您之前添加的 DisplayObject。

于 2013-02-08T08:03:49.120 回答
1

仅供参考,我认为你有一个小错误。

下面的代码相同的错误。

ArgumentError:错误 #2025:提供的 DisplayObject 必须是调用者的子对象。

是你的情况?

var mc:MovieClip = new MovieClip();
addChild(mc);
var childMc:MovieClip = new MovieClip();
mc.addChild(childMc);

//this line wrong.
stage.removeChild(childMc);

如果是这种情况,请stage.removeChild(childMc);更改为mc.removeChild(childMc);

removeChild()表示从 DisplayObjectContainer 实例的子列表中移除指定的子 DisplayObject 实例。作为parent.removeChild(child);

stagechildMc父母的父母。

mcchildMc父母。

还是这个案子?

var mc:MovieClip = new MovieClip();
addChild(mc);
var childMc:MovieClip = new MovieClip();
mc.addChild(childMc);

stage.removeChild(mc);
while(mc.numChildren)
{
    mc.removeChildAt(0);
}

如果你在这种情况下,mc 会被这条线删除,stage.removeChild(mc); 试图 mc child removeChild。已删除 mc,因此发生错误。孩子必须从最下面移除。

改成

while(mc.numChildren)
{
    mc.removeChildAt(0);
}
stage.removeChild(mc);

如果你想明确回答。必须附上代码。

于 2013-02-08T07:20:03.957 回答
0

在调用 removeChild 之前,您是否在任何地方使用过 addChild?

孩子应该在您调用 removeChild 的父母的显示列表中。

只要不在舞台上,父级始终为空。

于 2013-02-08T06:45:05.330 回答
0

如果你想在不记得它的父母是什么的情况下随意删除孩子,你可以这样做:

if( child.parent )  child.parent.removeChild( child );
于 2013-02-14T22:21:22.497 回答