as3.0自定义类源代码转自天地会兄弟(jony_mc ),由于目前正要用到自定义事件类,所以在天地会看到了,特定转过来以备后用,没经过jony_mc兄弟允许还请凉解。
很多朋友对自定义事件概念模糊,思路不够清晰,下面我用一个很简单的实例来说明如何自定义一个具有两个事件类型事件。下面这个例子有四个类文件,一个是男孩类、一个是女孩类、一个是自定义事件类、一个是文档类。我们的目标是,男孩发出不同的事件,女孩做出不同的反映。
以下类文件和主文档放在同一目录下。
1、自定义事件类:
package {
import flash.events.Event;
//导入事件类
public class CustomEvent extends Event {
//声明自定义事件扩展自事件类成为其子类
public static const SENDFLOWER:String="sendFlower";
//声明静态常量作为事件类型1
public static const SENDCAR:String="sendCar";
//声明静态常量作为事件类型2
public var info:String;
//声明变量储存事件信息,这也是我们用自定义事件的主要原因,可以用他来
//携带额外的信息
public function CustomEvent(type:String,inf) {
super(type);
//调用父类构造函数并设置传入的参数作为事件类型
info=inf;
//将传入的参数2存入info
}
}
}
2、男孩类:
package {
import flash.events.EventDispatcher;
//导入事件发送者类
import flash.events.Event;
//导入事件类
public class Boy extends EventDispatcher {
//声明男孩类扩展自事件发送者类,成为其子类
public function sendFlower() {
//声明公开送花方法;
var info:String="玫瑰花";
//声明局部变量设置发送信息
var events=new CustomEvent(CustomEvent.SENDFLOWER,info);
//声明一个新的自定义事件类的实例,并设置类型为第一种、
//将发送信息存入事件
this.dispatchEvent(events);
//发送该事件
}
public function sendCar() {
//声明公开送车方法;
var info:String="百万跑车";
//声明局部变量设置发送信息
var events=new CustomEvent(CustomEvent.SENDCAR,info);
//声明一个新的自定义事件类的实例,并设置类型为第二种、
//将发送信息存入事件
this.dispatchEvent(events);
//发送该事件
}
}
}
3、女孩类:
package {
public class Girl {
public function replay(info):void {
trace(info);
}
//声明公开方法,做出反应
}
}
4、文档类:
package {
import flash.display.Sprite;
//导入Sprite类
public class Documents extends Sprite {
//声明文档类扩展自sprite类
private var _boy:Boy;
//声明私有属性为男孩类型
private var _girl:Girl;
//声明私有属性为女孩类型
public function Documents() {
//构造函数
_boy=new Boy;
//创建男孩实例
_girl=new Girl;
//创建女孩实例
_boy.addEventListener(CustomEvent.SENDFLOWER,_hand);
//为男孩增加类型为CustomEvent.SENDFLOWER的事件监听
_boy.addEventListener(CustomEvent.SENDCAR,_hand);
//为男孩增加类型为CustomEvent.SENDCAR的事件监听
_boy.sendCar()
//调用男孩的送车的方法。你可以再试着调用男孩的sendFlower
//方法试试,看结果有什么不同
}
private function _hand(E:CustomEvent):void {
//声明事件处理器
_girl.replay("我收到一位帅哥送我的:"+E.info);
//调用女孩的replay方法。
}
}
}
希望各位不懂自定义事件的朋友看了之后会有所启发,总之,事件发送没反应大部分原因是发送者和接受者不在一个反应区域内。基本上如果是自定义类要发送事 件,那么监听者也是他自己。如果是显示对象发送自定义事件,可以让他自己监听也可以让他的父级显示容器监听,但如果是后者则必须将冒泡参数设为true, 在本例中就是修改自定义事件类文件中的
super(type);
这一行为super(type,true);