天天看点

【转】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 }