Actionscript 3 AS3单击时删除对象

Actionscript 3 AS3单击时删除对象,actionscript-3,Actionscript 3,我想在单击某个对象时将其设置为null,并尝试实现以下代码: public function onClick(evt:MouseEvent):void{ var thisPatient = evt.target; thisPatient = null; } 然而,该元素仍在舞台上 将其设置为null是不够的。您还必须使用removeElement()或removeChild()将其从其父容器中删除,具体取决于您使用的容器类型。将其设置为n

我想在单击某个对象时将其设置为null,并尝试实现以下代码:

        public function onClick(evt:MouseEvent):void{
        var thisPatient = evt.target;
        thisPatient = null;
    }

然而,该元素仍在舞台上

将其设置为null是不够的。您还必须使用
removeElement()
removeChild()
将其从其父容器中删除,具体取决于您使用的容器类型。

将其设置为null是不够的。您还必须使用
removeElement()
removeChild()
将其从其父容器中删除,具体取决于您使用的容器类型。

您只需执行
removeChild(thisPatient)
操作,如果您将对象放入另一个对象中,则必须执行
parent.removeChild(thisPatient)

您只需执行
removeChild(thisPatient)
,如果您将对象放入另一个对象中,则必须执行
parent.removeChild(thisPatient)

但让孩子们自己离开是不好的做法。更正确的解决方案是dispathing事件,因为父级必须决定是否删除子级

public function onClick(evt:MouseEvent):void{
    dispatchEvent(new Event("removeMe", true));
}

//parent's code...
child.addEventListener("removeMe", removeHandler);
但让孩子们自己离开是不好的做法。更正确的解决方案是dispathing事件,因为父级必须决定是否删除子级

public function onClick(evt:MouseEvent):void{
    dispatchEvent(new Event("removeMe", true));
}

//parent's code...
child.addEventListener("removeMe", removeHandler);

根据我的经验,注册一个事件对象时,必须删除所有事件。所有事件将完全手动删除。不会释放所有事件的对象上的removeChild。removeChild,但发生内存泄漏。这是因为您没有删除该事件。在删除对象之前,必须删除事件。

根据我的经验,注册事件对象时,必须删除所有事件。所有事件将完全手动删除。不会释放所有事件的对象上的removeChild。removeChild,但发生内存泄漏。这是因为您没有删除该事件。在删除对象之前,必须删除事件。

我认为这是公认的答案,因为它也解释了自定义事件。孩子们删除自己的问题是可能创建的剩余引用,因此是的,我完全同意这是一种不好的做法。但是,我不会为此使用额外的事件,而是直接调用处理函数,删除调用它的对象。可能是吹毛求疵,但事件太多会导致性能问题,特别是在为手机开发的情况下。有人可能会说,如果您照顾孩子会删除自己,那么家长应该侦听
事件。已删除的
事件,如果孩子调用
parent.removeChild,就会引发该事件(此)
evt.target
evt.currentTarget
之间存在差异,
target
可能不是您所期望的。我认为这是公认的答案,因为它也解释了自定义事件。孩子删除自己的问题是可能已创建的剩余引用,所以是的,我完全同意这是一种坏习惯。但是,我不会为此使用额外的事件,而是直接调用处理函数,删除调用它的对象。可能是吹毛求疵,但事件太多会导致性能问题,特别是在为手机开发的情况下。有人可能会说,如果您照顾孩子会删除自己,那么家长应该侦听
事件。已删除的
事件,如果孩子调用
parent.removeChild,就会引发该事件(此)
并且
evt.target
evt.currentTarget
之间存在差异,
target
可能不是您所期望的。