Actionscript 3.0 事件机制剖析---事件发送方式(一)

来源:互联网 发布:world网络用语什么意思 编辑:程序博客网 时间:2024/03/29 15:02

            

         Actionscript 3.0 事件机制剖析

                                                                 事件发送方式(一)

  声明:欢迎任何人和组织转载本blog中文章,但必须标记文章原始链接和作者信息。

  本文链接:http://blog.csdn.net/li_007/archive/2009/03/02/3949445.aspx

  开拓进取的小乌龟------->CSDN点滴点点滴滴Blog

 

  在前面的文章中解释了Actionscript 3中的事件机制的几个步骤,也给出了一个自定义的事件的例子。但是在事件类定义后怎么发送事件呢?这是一个值得大家思考的问题,因为事件的发送关系到事件的监听。下面对这句话多说几句。

 

  前面文章已经说了,在Actionscript 3中要区分Event和Event Flow,Event事件是直接将事件发送到target,中间没有Event Flow的Capture phases、Target Phases和Bubbling Phases三个阶段(在后面的blog中我会讲到Event Flow,在下面文章中提到的Event都是普通的Event,不牵涉到Display List,也就不牵涉到Event Flow),所以这样的话,肯定是谁发送事件,谁就负责监听事件。

 

   在Actionscript 3中Event Class是负责提供各种事件,比如Error,ADD ,etc.来给EventDispatcher class对象来使用,故要想实现事件的发送,就必须用到EventDispatcher class或者它的子类,而EventDispatcher class是实现了IEventDispather Interface。所以这样我们可以有三种实现事件发送的方法:继承EventDispatcher class、复合EventDispatcher 对象以及实现IEventDispatcher Interface。

 

    下面将上一篇blog中的事件发送方式改为继承EventDispatcher class的方法:

    1、AlarmEvent.as文件中定义的 Alarm Event class不做任何改变。

    2、增加AlarmDispatcher.as来定义继承自EventDispatcher class的子类AlarmDispatcher class,代码实现如下:

 

    3、修改TestEvent class中的OnTimerClock方法如下:

         

 

   当然针对TIMER_ALARM的监听也应该由AlarmDispatcher Class的实例对象来监听了,不然就无法收到事件。

 

   对比这种方式和先前没修改之前的方式有什么不一样呢?其实是一样的,先前本来就是继承EventDispatcher class来发送事件的。原因是:所有的Actionscript 3的显示对象都是DisplayObject或者其子类的实例,而DisplayObject又是事件发送类EventDispatcher的子类,因此所有的显示对象都可以发送事件了。在本例中TestEvent继承了文档类Sprite,显然Sprite也是显示对象,也当然就继承了EventDispatcher的方法,也就可以直接this.dispatcherEvent(...)了。

原创粉丝点击