AS3.0自定义事件

来源:互联网 发布:kali linux卸载输入法 编辑:程序博客网 时间:2024/05/22 03:21

下面给大家编个故事,有助于大家能更好更形象地去理解AS3.0自定义事件!

 一、第一步

首先忘记你学到的任何关于事件类的知识,不知道有这么一回事,然后只知道FLASH有个内置类,名叫EVENT

二、第二步

来看这个类有什么——它有很多很多常数属性,比如COMPLETE,CLOSE,CLEAR等等。那么,这些参数干什么用的呢?很明确的告诉你,flash已经用掉了,用来标记一些flash已经设计好的事件——完成某件事、关闭某个东西、清除某个东西。

三、第三步

来看这个类能干什么——这些已经被标记好的事件,通常在一些常用内置类里面已经被注册好了。比如,loader类用COMPLETE表示完成了读取。当你想用到这个事件时,只需要在用的地方把这个事件调出来就行了——怎么调呢?addEventListener(事件的标记,触发标记后要做的事情)。

四、第四步

flash提供的这些事件不够我用怎么办?好办,自己来做一个事件呗!——怎么做?那你首先得让flash知道你这是个事件吧——事件的标记方法是内置事件类已经做好了,至于怎么实现那就不是你操心的事了,反正继承了event就是一个事件,这就对了。所以,你需要做的第一件事就是先把flash强大的event给继承出来。假设这个事件叫Cevent!

public class Cevent extends Event{    public function Cevent(type:String):void   {    super(type);   }}


五、第五步

继承出来以后怎么办?“flash怎么做的,我就怎么做呗!”是的,那边的小朋友很聪明,flash是怎么做的?对了,先添加一个标记。与flash一样,你在这个继承的类里声明了一个常数,为了遵从伟大的程序员们的传统,他们说常数最好用大写,你也就用了大写,假设是“MYGOD”。但同时,为了尊从伟大的flash的传统,我给了这个常数一个字符串的值-“mygod”(其实,如果你不尊重传统也无所谓,标记是什么?标记跟你的名字一样,就是让别人认得你而已,你说你叫“123456”,那么我说“123456”的时候就是指你)
于是,一个事件的标记就出来了:

public static const MYGOD:String="mygod";


六、第六步

事件就这样定义行了吗?当然还不行!你的确声称你有个“MYGOD”事件,但关键是这个事件究竟是谁弄出来的?怎么弄的?天知道你知道...但是flash不知道。所以,你就得告诉flash,这个事件是哪个无聊的类整出来的,是怎么整出来的。假设某个无聊类叫god,god弄出了这个MYGOD事件,god是事情的元凶,因此你就必须指定这个元凶。而所有的事件元凶都一个妈生的,这个妈叫“EventDispatcher”类,也是flash里一个内置类。现在简单了吧~咱们继续继承。

public class god extends EventDispatcher

七、第七步

指定了元凶还是不行,他不肯承认他的罪行,因为你没说他在什么地方搞出了这个事件。所以,我得给他一个函数,在这个函数中把这个事件点名出来。这样它才是名副其实的事件发送者。假设,god有个godispig函数,是专门搞这个事的函数,那么就这么来指证它。

这段代码的意思就是,一旦你做godispig这件事(就是调用这个方法),你就触发了MYGOD事件!

public function godispig():void{dispatchEvent(new Cevent(Cevent.MYGOD))}

八、第八步

还没完???!是的,当然还没玩,上面这个god类仅仅是有了犯事的可能,但不能因为人家有可能出轨,我就说它出轨了吧。所以,正真触发这件事的不是这个类本身,而是你在其他地方引用这个类,并调用这个函数时才会出事。那么,用什么方法呢?哈~那个小朋友又举手了,好~你说!“flash怎么做的,我就怎么做呗!”哇!小朋友,你真是个天才啊!!!没错,用我们的老朋友addEventListener(事件的标记,触发标记后要做的事情)。具体点就是addEventListener(Cevent.MYGOD,触发标记后要做的事情)。当我在某个类中实例化了god类,那么这个实例一旦调用godispig这个函数,怎么样?!他就犯事了!!!!犯事要干嘛?要执行“触发标记后要做的事情”。此时,你要杀要砍要奸要抢就随你便了,全部到那个触发的事情里面去做吧。——这就是事件,而且是标准的自定义事件...至于,你还要给这个事件填油加醋什么的,也好办,到你的自定义类里面再写几个变量,比如info什么的,

public function Cevent(type:String,inf:String=""):void  {   super(type);   info=inf;  }

这样,当你注册事件触发函数时,就可以用dispatchEvent(new Cevent(Cevent.MYGOD,参数))里的这个参数再传点什么八卦的信息出来,而一旦进入“触发标记后要做的事情”中那个函数时,就可以用事件对象参数(假设为e:cevent)e来得到这个小道消息了。

原创粉丝点击