AS3显示对象故障

时间:2011-01-16 21:08:36

标签: actionscript-3

我在AS3制作游戏。当我向游戏屏幕添加敌人时,稍后我必须在它死亡时删除它。但我一直这样说:

[Fault] exception, information=ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.

但我明确地将敌人加入了游戏画面。这可能是通过一堆功能或什么来传递敌人吗?

2 个答案:

答案 0 :(得分:2)

这意味着您尝试从不是其父级的DisplayObjectContainer中删除MovieClip(或Sprite左右)。

您必须确保在右侧DisplayObjectContainer上调用removeChild()方法。

例如:

var myChild:MovieClip = new MovieClip();
var holder:MovieClip = new MovieClip();

holder.addChild(myChild);

所以当你想删除孩子时,你必须在持有人身上调用removeChild方法。

holder.removeChild(myChild);

如果您在舞台上调用removeChild(),则会出现错误,因为舞台不会将myChild作为自己的子节点。

如果你在正确的容器上调用removeChild,请仔细检查。

PS:示例代码总是更容易调试

答案 1 :(得分:1)

在处理时间轴时,有时很难跟踪对象的范围,在这种情况下,您始终可以从对象的父属性中调用该方法。

     child.parent.removeChild( child );

如果你在FlashDevelop&出于某种原因,不希望或不能跟踪父项,您可以实现几种方法来添加和删除显示列表中的对象,实际上委托添加&移到对象...

在您的对象类中,您可以执行以下操作...

    private var container:DisplayObjectContainer;

    public function addToDisplayList( container:DisplayObjectContainer ):void
    {
         this.container = container;
         container.addChild( this );
     }

    public function remove():void
    {
         if( container != null )
             container.removeChild( this );
     }

然后你可以这样做:

   var child:MovieClip = new MyObject();
   child.addToDisplayList( whatever );

   //later...
   child.remove();