我在AS3制作游戏。当我向游戏屏幕添加敌人时,稍后我必须在它死亡时删除它。但我一直这样说:
[Fault] exception, information=ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
但我明确地将敌人加入了游戏画面。这可能是通过一堆功能或什么来传递敌人吗?
答案 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();