【黑羽】注意!超简便的事件发送&管理器EventSender 1.5版已发布
http://www.kingda.org/archives/kingda/2006/10/eventsender_15.html 版本号: 1.0正式版 呵呵,这个小东东虽然小,但是很有用。简单的说,它只用两行代码就可以让ActionScript 2.0中所有不能发送事件的对象都可以发送事件了。
最有用的就是让舞台上任何一个普通MovieClip都可以发送事件出来,并很容易的被舞台上,或者类侦听到。
实在是方便的紧,我们在小项目中经常用它,喜欢。
![]()
点击下载
为何使用EventSender?
ActionScript 2.0中除了UIComponent能自己发送事件,绝大部分类不能自己发送事件的,比如MovieClip, 或者一些自定义的类。黑羽还制作了一个EventSender的事件发送类来解决。
当然你可以通过扩展来解决MovieClip这些类来解决,但是在一些轻量级或者特殊运用中,还是用黑羽这个EventSender类更加方便。
比如说,你突然需要舞台上某个A_mc的运行到第20帧时发送一个"finished"事件出来,并且希望另外某个B_mc能够捕捉到这个事件,那么用一般的扩展方法不知道有多么麻烦!
(1.要重做一个带有事件发送功能的类和A_mc通过某种方式绑定。2.同时确保在B_mc中要能访问到发送事件的对象并addEventListenr)。
而用俺的EventSender类非常简单,A_mc中写 EventSender.send("finished", this), B_mc中写EventSender.addListener("finished", listenerFunc),并可以通过event.target属性直接定位A_mc,真是简单的不能再简单了。(请尽量以正规方法为主,不推荐频繁使用,不是好的编程习惯)
![]()
ActionScript 3.0中就不需要这个东东了,见
http://www.kingda.org/archives/kingda/2006/07/as305.html
<使用方法>
用法:
1.双击mxp文件安装。
2.不管在帧中写代码,还是在类中,要用EventSender,就要在第一行写上
import org.kingda.tools.EventSender;
侦听事件: EventSender.addListener(eventType:String, lisener:Object);
侦听器可以是函数也可以是对象。 f
发送事件: 先定义evtObj {type:"eventName", target:xxx}, 然后EventSender.dispatch(evtObj:Object);
快速发送事件 : EventSender.send(eventType:String, eventTarget:Object)
例子:
//黑羽翔天EventSender类 1.0版
import org.kingda.tools.EventSender;
EventSender.addListener("gogo", lisFunc);
var o:Object = {type:"gogo", target:this};
EventSender.dispatch(o);
function lisFunc(eO):Void {
trace ("listened:" + eO.target);
}
var lisObj:Object = new Object();
lisObj.gogoKingda = function () {
trace("gogoKingda listened!");
}
EventSender.addListener("gogoKingda", lisObj);
EventSender.send("gogoKingda", this);
使用要点:
由于都是使用的EventListener来addListener的,所以如果事件名相同的话,要用event.target来区分判断。或者采用不同的事件名,管理好即可。
总而言之,这只是个小工具,为了方便才用用。不要把它当成主要方法哦!
![]()







Comments (6)
我爱烟水晶,这个不是spam.
Posted by saicn | July 27, 2006 9:21 AM
Posted on July 27, 2006 09:21
我正在尝试将Cairngorm Framework的设计思想用与AS2开发中,预计会很高效!
Posted by 水分子 | July 27, 2006 3:38 PM
Posted on July 27, 2006 15:38
希望修正一下send的用法,能跟上要需要发送的内容,
public static function send(evtType:String, sendObj:Object,evtData:Object):Void {
getInstance().sendEvt(sendObj, evtType,evtData);
}
大体只是缩短了EventDispatcher类的名字,给懒人造福
Posted by 逍遥云 | August 1, 2006 3:10 PM
Posted on August 1, 2006 15:10
这样A类如何监听B类发出的事件?我想应该是不行的吧,还有在里面加上removeListener方法。
Posted by 逍遥云 | August 1, 2006 3:46 PM
Posted on August 1, 2006 15:46
嗯,有道理。应该加个removeListener,我改改 ^_^
另外,最主要的用处是用在时间轴里面,那样用EventSender最方便。
Posted by 黑羽 | August 1, 2006 5:46 PM
Posted on August 1, 2006 17:46
A类是不能直接监听B类的事件的,他通过EventSender里面的instance来间接进行。比如通过target,或者eventName来判断是否B类事件。
Posted by 黑羽 | August 1, 2006 5:48 PM
Posted on August 1, 2006 17:48