`
sunxin1001
  • 浏览: 304199 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

As3 自定义事件

阅读更多

通过男女关系很生动的讲解了as3自定义事件的方法,希望对还不是了解自定义事件的童鞋有所帮助。

下面这个例子有四个类文件,一个是男孩类、一个是女孩类、一个是自定义事件类、一个是文档类。我们的目标是,男孩发出不同的事件,女孩做出不同的反映。
以下类文件和主文档放在同一目录下。

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);

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics