AS 发送事件

来源:互联网 发布:知乎的楠爷李楠 编辑:程序博客网 时间:2024/06/07 17:29

转自  :   http://blog.csdn.net/aisajiajiao/article/details/6960475



在AS3中实现自定义事件发送者有多种方法,这几天第四次看黑羽的殿堂之路,顺势就写下了,其本质只有一个EventDispatcher。


AS3是面向对象的语言,面向对象思想解析如下图:


所以在这里我们也有多种方法来实现自定义事件发送类。

这里有三种:

1.通过继承来实现;

2.通过复合来实现;

3.通过实现接口来实现。

在AS3事件中有3个要素,如下图所示,我们现在要实现的是自定义一个EventDispatcher。


第一种方法:继承EventDispatcher来实现

  1. package  
  2. {  
  3.     import flash.display.Sprite;  
  4.     import flash.events.Event;  
  5.     import flash.events.EventDispatcher;  
  6.       
  7.     /**  
  8.      * ...  
  9.      * @author aisajiajiao  
  10.      * 使用继承来实现  
  11.      */  
  12.       
  13.     public class CustomEventDispatcherDemo extends Sprite  
  14.     {  
  15.       
  16.         public function CustomEventDispatcherDemo()  
  17.         {  
  18.             var dispatcher:SampleEventDispatcher = new SampleEventDispatcher();  
  19.             //不推荐直接使用字符串表示事件类型,这里只是作为演示  
  20.             dispatcher.addEventListener("Custom",actionListener);  
  21.             dispatcher.dispatchEvent(new Event("Custom"));  
  22.         }  
  23.           
  24.         private function actionListener(e:Event):void  
  25.         {  
  26.             trace("自定义事件发送类" + e);  
  27.         }  
  28.     }  
  29. }  
  30.   
  31. import flash.events.Event;  
  32. import flash.events.EventDispatcher;  
  33.   
  34. //继承  
  35. class SampleEventDispatcher extends EventDispatcher  
  36. {  
  37.     //这里可以写一些自己需要的代码  
  38. }  

第二种方法:复合来实现

  1. package  
  2. {  
  3.     import flash.display.Sprite;  
  4.     import flash.events.Event;  
  5.     import flash.events.EventDispatcher;  
  6.       
  7.     /**  
  8.      * ...  
  9.      * @author aisajiajiao  
  10.      * 使用复合来实现  
  11.      */  
  12.       
  13.     public class CustomEventDispatcherDemo2 extends Sprite  
  14.     {  
  15.       
  16.         public function CustomEventDispatcherDemo2()  
  17.         {  
  18.             var dispatcher:SampleEventDispatcher = new SampleEventDispatcher();  
  19.               
  20.             //这里我们可以看出使用复合之后,该类就不能再看做EventDispatcher对象了  
  21.             dispatcher.getEventDispatcher().addEventListener("Custom",actionListener);  
  22.             dispatcher.getEventDispatcher().dispatchEvent(new Event("Custom"));  
  23.         }  
  24.           
  25.         private function actionListener(e:Event):void  
  26.         {  
  27.             trace("自定义事件发送类" + e);  
  28.         }  
  29.     }  
  30. }  
  31.   
  32. import flash.events.Event;  
  33. import flash.events.EventDispatcher;  
  34.   
  35. class SampleEventDispatcher  
  36. {  
  37.     private var _dispatcher:EventDispatcher;  
  38.       
  39.     public function SampleEventDispatcher()  
  40.     {  
  41.         _dispatcher = new EventDispatcher();  
  42.     }  
  43.       
  44.     //get方法  
  45.     public function getEventDispatcher():EventDispatcher  
  46.     {  
  47.         return _dispatcher;  
  48.     }  
  49. }  

第三种方法,实现IEventDispatcher接口。

  1. package  
  2. {  
  3.     import flash.display.Sprite;  
  4.     import flash.events.Event;  
  5.     import flash.events.EventDispatcher;  
  6.       
  7.     /**  
  8.      * ...  
  9.      * @author aisajiajiao  
  10.      * 使用IEventDispatcher接口  
  11.      */  
  12.       
  13.     public class CustomEventDispatcherDemo3 extends Sprite  
  14.     {  
  15.       
  16.         public function CustomEventDispatcherDemo3()  
  17.         {  
  18.             var dispatcher:SampleEventDispatcher = new SampleEventDispatcher();  
  19.               
  20.             //不推荐直接使用字符串表示事件类型,这里只是作为演示  
  21.             dispatcher.addEventListener("Custom",actionListener);  
  22.             dispatcher.dispatchEvent(new Event("Custom"));  
  23.         }  
  24.           
  25.         private function actionListener(e:Event):void  
  26.         {  
  27.             trace("自定义事件发送类" + e);  
  28.         }  
  29.     }  
  30. }  
  31.   
  32. import flash.events.Event;  
  33. import flash.events.EventDispatcher;  
  34. import flash.events.IEventDispatcher;  
  35.   
  36. //这样灵活性非常大,可以在这里实现你想要的各种功能  
  37. class SampleEventDispatcher implements IEventDispatcher  
  38. {  
  39.     public var _dispatcher:EventDispatcher;  
  40.       
  41.     public function SampleEventDispatcher()  
  42.     {  
  43.         _dispatcher = new EventDispatcher();  
  44.     }  
  45.       
  46.     public function addEventListener(type:String,listener:Function,  
  47.                     useCapture:Boolean = false,priority:int = 0,useWeakReference:Boolean = false):void  
  48.     {  
  49.         _dispatcher.addEventListener(type,listener,useCapture,priority,useWeakReference);  
  50.     }  
  51.       
  52.     public function dispatchEvent(event:Event):Boolean  
  53.     {  
  54.         return _dispatcher.dispatchEvent(event);  
  55.     }  
  56.       
  57.     public function hasEventListener(type:String):Boolean  
  58.     {  
  59.         return _dispatcher.hasEventListener(type);  
  60.     }  
  61.       
  62.     //注意这里的参数个数是与addEventListener数目不同的,仅有3个  
  63.     public function removeEventListener(type:String,listener:Function,useCapture:Boolean = false):void  
  64.     {  
  65.         _dispatcher.removeEventListener(type,listener,useCapture);  
  66.     }  
  67.       
  68.     public function willTrigger(type:String):Boolean  
  69.     {  
  70.         return _dispatcher.willTrigger(type);  
  71.     }  
  72. }  

所有自定义事件最终的输出结果如下图:


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 诛仙摆摊金币被扣怎么办 诛仙手游宠物亲密度满了怎么办 诛仙包裹满了怎么办 感觉自己心理有问题 怎么办 刺激战场手机配置低怎么办 国土防线2没反应怎么办 镜之边缘迷路了怎么办? 陌陌直播不清晰怎么办 夏利n5 1.0费油怎么办 gg修改器是病毒怎么办 传送门骑士联机读条慢怎么办 被打成轻伤派出所不抓人怎么办 有人上门找事怎么办算正当防卫吗 win10 电脑账户被停用怎么办 电脑一键还原后黑屏怎么办 win一键还原后黑屏怎么办 打架对方群殴我我怎么办 杀了人没钱赔怎么办 团伙打架被对方所刀捅伤怎么办 过失致人重伤赔偿不起怎么办 被别人打了派出所不管怎么办 先动手的被打伤怎么办 自为伤了人怎么办? 孩子被打不敢还手怎么办 小孩给电打了怎么办 电打了手都黑了怎么办 手指被电打伤了怎么办 电打了手有点麻怎么办 没打人对方确弄个轻伤证明怎么办 对人造成轻伤害怎么办 如果有人要砍我怎么办 美版手机坏了怎么办 战地4ping太高怎么办 喝了红牛睡不着怎么办 球球大作战总是闪退怎么办解决方法 球球大作战手机号己绑定怎么办 弄的底窝中药味太大怎么办 锤子手机上不了网怎么办 ppt没保存就卡了怎么办 ppt卡了没保存怎么办 匡威鞋舌头跑偏怎么办