[原创]AS3.0的自定义事件

  自定义事件一直是困扰我的大问题之一,dispatchEvent()、Event类、addEventListener()一直都不知道他们之间的联系和自定义事件的用法,尤其是在类与类间调用方法这些方面上更是感到玄之又玄…… 幸运的是随着使用AS时间的推移,逐渐让我体会了一些东西,也不知道是否正确,但终究值得写上一点。
  这个例子很简单,首先是一个fla文件——自定义事件.fla,为了简便,没有设置文档类。然后是一个外部类文件——MyEvent.as,这个就是我们的自定义事件类,保存了自定义事件的名称和可能用到的参数。他的代码如下:
package {
	import flash.events.Event;
	public class MyEvent extends Event{
		public static const MY_EVENT="my_event";
		public var name:String="";
		public function MyEvent(eventType:String, args:String){
			super(eventType);
			name=args;
		}
	}
}

  从上面可以很清楚的看到,在实例化类的时候就为这个新的事件对象添加了事件类型eventType和事件参数name。 这里eventType作为参数传递给了父级类Event的构造函数,以达到区分事件的目的。
  fla文件上的代码如下:
thing_mc.addEventListener(MouseEvent.CLICK, onFunc);
thing_mc.addEventListener(MyEvent.MY_EVENT, onFunc2);
function onFunc(e:MouseEvent){
	trace("按钮事件");
	thing_mc.dispatchEvent(new MyEvent(MyEvent.MY_EVENT, "自定义事件"));
}
function onFunc2(e:MyEvent){
	trace(e.name);
}

  thing_mc是舞台上的影片剪辑。在其上添加了一个点击事件,在点击触发函数onFunc中,调度了我们的自定义事件MyEvent.MY_EVENT,这就是个伏笔,若在thing_mc上注册有MyEvent.MY_EVENT类的事件处理函数,则该处理函数就会被调用,这里的处理函数就是onFunc2。
  综合以上,在整个过程当中,开头提到的Event类告诉程序要做的是“什么事”,addEventListener()告诉程序这件事“如何做”,dispatchEvent()则决定“何时做”这件事,即调用dispatchEvent()函数的时候就是事件要发生的时候。

你可能感兴趣的:(Flash)