2016-10-13 00:16:48 点击量:40 标签: 收藏本文
现有两个对象A和B,并且这两个对象都侦听了ADDED_TO_STAGE事件,如果在A对象的事件添加B对象到stage中,则B对象会触发两次ADDED_TO_STAGE,是什么原因导致的?有什么办法避免这个问题?
这是因为:事件处在目标阶段的时候添加子对象,子对象的侦听器被触发两次
解决办法就是在子对象的ADDED_TO_STAGE事件中先清除该事件,然后在REMOVED_FROM_STAGE事件里再次侦听。
A类:
- public class A extends Sprite {
- public function A() {
- addEventListener(Event.ADDED_TO_STAGE, eventHandler);
- }
- private function eventHandler(evt:Event):void {
- removeEventListener(evt.type, eventHandler);
- if (evt.type == Event.ADDED_TO_STAGE) {
- trace("A");
- addChild(new B());//酷播cuplayer.com提示:添加B作为子对象
- addEventListener(Event.REMOVED_FROM_STAGE, eventHandler);
- }else {
- addEventListener(Event.ADDED_TO_STAGE, eventHandler);
- }
- }
- }
B类:
- public class B extends Sprite {
- public function B() {
- addEventListener(Event.ADDED_TO_STAGE, eventHandler);
- }
- private function eventHandler(evt:Event):void {
- removeEventListener(evt.type, eventHandler);
- if (evt.type == Event.ADDED_TO_STAGE) {
- trace("B");//www.cuplayer.com提示:只触发一次
- addEventListener(Event.REMOVED_FROM_STAGE, eventHandler);
- }else {
- addEventListener(Event.ADDED_TO_STAGE, eventHandler);
- }
- }
- }
我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室