为了账号安全,请及时绑定邮箱和手机立即绑定

AS3 的 EventDispatcher类?

/ 猿问

AS3 的 EventDispatcher类?

元芳怎么了 2019-02-13 15:07:10

AS3 的 EventDispatcher类


查看完整描述

3 回答

?
慕森王

EventDispatcher这个就是as3里面事件发送者,这个也是相对as2增加一个很好的功能,只有继承自这个类的对象才可以发送事件,dispatchEvent()就是发送事件的方法。比如你新建了一个对象A,你想让这个对象发生了某些变化后,通知别的对象,就可以用 dispatchEvent(new Event("yourEvent"))然后你在别的地方调用到A地方就可以对A加一个侦听器
A.addEventListener("yourEvent",yourfunction) 这个事件可以自定义,一般的对象都是EventDispatcher的子类的;
下面的网址有官方比较详细的说明可以去参考一下;http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/events/EventDispatcher.html

查看完整回答
反对 回复 2019-03-18
?
holdtom

你可以这样理解事件类:
1.第一步,首先忘记你学到的任何关于事件类的知识,不知道有这么一回事,然后只知道FLASH有个内置类,名叫EVENT
2.第二步,来看这个类有什么——它有很多很多常数属性,比如COMPLETE,CLOSE,CLEAR等等。那么,这些参数干什么用的呢?很明确的告诉你,flash已经用掉了,用来标记一些flash已经设计好的事件——完成某件事、关闭某个东西、清除某个东西。
3.第三步,来看这个类能干什么——这些已经被标记好的事件,通常在一些常用内置类里面已经被注册好了。比如,loader类用COMPLETE表示完成了读取。当你想用到这个事件时,只需要在用的地方把这个事件调出来就行了——怎么调呢?addEventListener(事件的标记,触发标记后要做的事情)。
4.第四步,flash提供的这些事件不够我用怎么办?好办,自己来做一个事件呗!——怎么做?那你首先得让flash知道你这是个事件吧——事件的标记方法是内置事件类已经做好了,至于怎么实现那就不是你操心的事了,反正继承了event就是一个事件,这就对了。所以,你需要做的第一件事就是先把flash强大的event给继承出来。假设这个事件叫Cevent!
public class Cevent extends Event
{
public function Cevent(type:String):void
{
super(type);
}
}
5.第五步,继承出来以后怎么办?“flash怎么做的,我就怎么做呗!”是的,那边的小朋友很聪明,flash是怎么做的?对了,先添加一个标记。与flash一样,你在这个继承的类里声明了一个常数,为了遵从伟大的程序员们的传统,他们说常数最好用大写,你也就用了大写,假设是“MYGOD”。但同时,为了尊从伟大的flash的传统,我给了这个常数一个字符串的值-“mygod”(其实,如果你不尊重传统也无所谓,标记是什么?标记跟你的名字一样,就是让别人认得你而已,你说你叫“123456”,那么我说“123456”的时候就是指你)
于是,一个事件的标记就出来了:
public static const MYGOD:String="mygod";
6.第六步,事件就这样定义行了吗?当然还不行!你的确声称你有个“MYGOD”事件,但关键是这个事件究竟是谁弄出来的?怎么弄的?天知道你知道...但是flash不知道。所以,你就得告诉flash,这个事件是哪个无聊的类整出来的,是怎么整出来的。假设某个无聊类叫god,god弄出了这个MYGOD事件,god是事情的元凶,因此你就必须指定这个元凶。而所有的事件元凶都一个妈生的,这个妈叫“EventDispatcher”类,也是flash里一个内置类。现在简单了吧~咱们继续继承。
public class god extends EventDispatcher
7.第七步,指定了元凶还是不行,他不肯承认他的罪行,因为你没说他在什么地方搞出了这个事件。所以,我得给他一个函数,在这个函数中把这个事件点名出来。这样它才是名副其实的事件发送者。假设,god有个godispig函数,是专门搞这个事的函数,那么就这么来指证它。
public function godispig():void
{
dispatchEvent(new Cevent(Cevent.MYGOD))
}
这段代码的意思就是,一旦你做godispig这件事(就是调用这个方法),你就触发了MYGOD事件!
8,第八步,还没完???!是的,当然还没玩,上面这个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来得到这个小道消息了。



查看完整回答
反对 回复 2019-03-18
?
www说

EventDispatcher 类实现 IEventDispatcher 接口,并且是 DisplayObject 类的基类。 EventDispatcher 类允许显示列表上的任何对象都是一个事件目标,同样允许使用 IEventDispatcher 接口的方法。

dispatchEvent () 方法
public function dispatchEvent(event:Event):Boolean
将事件调度到事件流中。 事件目标是对其调用 dispatchEvent() 方法的 EventDispatcher 对象。

参数 event:Event — 调度到事件流中的 Event 对象。 如果正在重新调度事件,则会自动创建此事件的一个克隆。 在调度了事件后,其 target 属性将无法更改,因此您必须创建此事件的一个新副本以能够重新调度。
返回 Boolean — 如果成功调度了事件,则值为 true。 值 false 表示失败或对事件调用了 preventDefault()。
引发 Error — 已达到事件调度递归限制。




查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 180 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信