Actionscript 3.0 事件机制剖析---事件发送方式(一)
2009-03-02 13:48 libiver 阅读(185) 评论(0) 编辑 收藏 举报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(...)了。