您的位置:首页 > 其它

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

2009-03-02 13:48 435 查看

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,代码实现如下:

package
{
import flash.events.EventDispatcher;

/**
* Written by Leezhm, 28th February, 2009
* Contact : Leezhm@126.com
* Last Modified by Leezhm on 1st March, 2009
**/

public class AlarmDispatcher extends EventDispatcher
{
private var _alarmEvent:AlarmEvent;

public function dispatcherMsg(msg:String):void
{
if ("" != msg)
{
if (null == this._alarmEvent)
{
this._alarmEvent = new AlarmEvent();
}

this._alarmEvent.message = msg;

this.dispatchEvent(this._alarmEvent);
}
}
}
}


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

/**
* Dispatch the TIME_ALARM event when the currrent time was be
* the alarm setting time
*/
private function OnTimerClock(evt:TimerEvent):void
{
var _alarmDispatcher:AlarmDispatcher = new AlarmDispatcher();

_alarmDispatcher.addEventListener(AlarmEvent.TIME_ALARM, OnAlarmClock);

_alarmDispatcher.dispatcherMsg("Please get up!!!It's time for breakfast!!!");
}


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

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: