天天看點

【轉】Flash AS3.0 中的自定義事件

原文 http://www.cnblogs.com/acpp/archive/2010/10/19/1855670.html

1 package {
  2 
  3     import flash.events.Event;
  4 
  5     //導入事件類
  6 
  7     public class CustomEvent extends Event {
  8 
  9         //聲明自定義事件擴充自事件類成為其子類
 10 
 11         public static  const SENDFLOWER:String="sendFlower";
 12 
 13         //聲明靜态常量作為事件類型1
 14 
 15         public static  const SENDCAR:String="sendCar";
 16 
 17         //聲明靜态常量作為事件類型2
 18 
 19         public var info:String;
 20 
 21         //聲明變量儲存事件資訊,這也是我們用自定義事件的主要原因,可以用他來
 22 
 23         //攜帶額外的資訊
 24 
 25         public function CustomEvent(type:String,inf) {
 26 
 27             super(type);
 28 
 29             //調用父類構造函數并設定傳入的參數作為事件類型
 30 
 31             info=inf;
 32 
 33             //将傳入的參數2存入info
 34 
 35         }
 36 
 37     }
 38 
 39 }
 40 
 41 //2、男孩類:
 42 package {
 43 
 44     import flash.events.EventDispatcher;
 45 
 46     //導入事件發送者類
 47 
 48     import flash.events.Event;
 49 
 50     //導入事件類
 51 
 52     public class Boy extends EventDispatcher {
 53 
 54         //聲明男孩類擴充自事件發送者類,成為其子類
 55 
 56         public function sendFlower() {
 57 
 58             //聲明公開送花方法;
 59 
 60             var info:String="玫瑰花";
 61 
 62             //聲明局部變量設定發送資訊
 63 
 64             var events=new CustomEvent(CustomEvent.SENDFLOWER,info);
 65 
 66             //聲明一個新的自定義事件類的執行個體,并設定類型為第一種、
 67 
 68             //将發送資訊存入事件
 69 
 70             this.dispatchEvent(events);
 71 
 72             //發送該事件
 73 
 74         }
 75 
 76         public function sendCar() {
 77 
 78             //聲明公開送車方法;
 79 
 80             var info:String="百萬跑車";
 81 
 82             //聲明局部變量設定發送資訊
 83 
 84             var events=new CustomEvent(CustomEvent.SENDCAR,info);
 85 
 86             //聲明一個新的自定義事件類的執行個體,并設定類型為第二種、
 87 
 88             //将發送資訊存入事件
 89 
 90             this.dispatchEvent(events);
 91 
 92             //發送該事件
 93 
 94         }
 95 
 96     }
 97 
 98 }
 99 
100 //3、女孩類:
101 package {
102     public class Girl {
103         public function replay(info):void {
104             trace(info);
105         }
106         //聲明公開方法,做出反應
107     }
108 }
109 //4、文檔類:
110 package {
111 
112     import flash.display.Sprite;
113 
114     //導入Sprite類
115 
116     public class Documents extends Sprite {
117 
118         //聲明文檔類擴充自sprite類
119 
120         private var _boy:Boy;
121 
122         //聲明私有屬性為男孩類型
123 
124         private var _girl:Girl;
125 
126         //聲明私有屬性為女孩類型
127 
128         public function Documents() {
129 
130             //構造函數
131 
132             _boy=new Boy;
133 
134             //建立男孩執行個體
135 
136             _girl=new Girl;
137 
138             //建立女孩執行個體
139 
140             _boy.addEventListener(CustomEvent.SENDFLOWER,_hand);
141 
142             //為男孩增加類型為CustomEvent.SENDFLOWER的事件監聽
143 
144             _boy.addEventListener(CustomEvent.SENDCAR,_hand);
145 
146             //為男孩增加類型為CustomEvent.SENDCAR的事件監聽
147 
148             _boy.sendCar();
149 
150             //調用男孩的送車的方法。你可以再試着調用男孩的sendFlower
151 
152             //方法試試,看結果有什麼不同
153 
154         }
155 
156         private function _hand(E:CustomEvent):void {
157 
158             //聲明事件處理器
159 
160             _girl.replay("我收到一位帥哥送我的:"+E.info);
161 
162             //調用女孩的replay方法。
163 
164         }
165 
166     }
167 
168 }