这个例子很简单,首先是一个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()函数的时候就是事件要发生的时候。