End*_*der 0 flash actionscript-3
有没有办法检测从DisplayObjectContainer中删除子项的时间?我尝试重写removeChild(),但是当通过将子项添加到另一个容器(通过在新容器上调用addChild())删除子项时,这似乎不会触发.我不知道任何触发的事件,要么......
我知道您可以使用更高级别的Flex类来完成此操作,但我使用的是纯AS3项目.
更新:
正如Roy在评论中指出的那样,因为事件(包括Event.REMOVED)会冒泡,然后简单地为REMOVED事件添加一个事件监听器DisplayObjectContainer就足够了; 当从容器中移除任何子对象时,它将被调用(即使是因为该对象被添加到另一个容器中).
事件的target属性将是要删除的子项,并且currentTarget将始终是容器本身.
请注意,如果整个容器本身从其容器中移除,则此事件也将触发; 一个简单的if (e.target == e.currentTarget) return;应该处理这种情况.
原答案如下:
您可以将事件的事件侦听器添加到添加到您的每个Event.REMOVED事件中.然后对象本身将告诉您它已被删除,而不必依赖于通知.DisplayObjectDisplayObjectContainerDisplayObjectContainer
如果在将对象从一个容器移动到另一个容器时也不会触发,那么作为一种解决方法,您还可以侦听ADDED事件,并在触发时检查显示对象是否仍在容器中.
从容器中删除对象后,不要忘记删除事件侦听器,否则可能会导致内存泄漏,对同一对象的事件侦听器的多次调用等.
| 归档时间: |
|
| 查看次数: |
1100 次 |
| 最近记录: |