[AS3]as3.0中触发ADDED_TO_STAGE事件源代码示例
现有两个对象A和B,并且这两个对象都侦听了ADDED_TO_STAGE事件,如果在A对象的事件添加B对象到stage中,则B对象会触发两次ADDED_TO_STAGE,是什么原因导致的?有什么办法避免这个问题?
现有两个对象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);
- }
- }
- }
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...