当前位置: 首页 > 图文教程 > Flash动画 > Flash动画制作 > Flash的事件机制:从AsBroadcaster到EventDispatcher

Flash动画制作
Flash巧妙绘制卡通澳大利亚夏日海滩
Flash CS3教程:绘制小奶瓶图标
Flash绘画实例:青春靓丽美女
制作Flash MTV前音乐和矢量素材的处理
Flash入门教程:鼠标跟随星星动画
鼠标滚轮事件滚动有Flash动画的网页
Flash绘画技巧之关于动画中的云
Flash中不能导入WAV声音的解决办法
Flash绘画实例:卡通铅笔图标
Flash广告点击率的深入研究
Flash绘制云彩的简单方法
Flash Web结构之背景层浅析
全Flash动画网站的实现详细教程
Flash Web结构之数据显示层
Flash Web设计团队协作
去除Flash动画在线播放限制的技巧
Flash逐帧和补间制作小野人摇滚动画
合并不同帧频(fps)的Flash文件
电子杂志设计制作常用Flash技术
Flash临摹著名画家徐悲鸿的骏马图

Flash动画制作 中的 Flash的事件机制:从AsBroadcaster到EventDispatcher


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-22   浏览: 52 ::
收藏到网摘: n/a

AsBroadcaster(广播)类在MX(flash6)里写做"ASBroadcaster",这是为什么有时会发生以前的程序在2004版里发生异常的原因之一。AsBroadcaster 类具有四个静态的方法:
------------------------------------------------------------------------------
static function initialize(o:Object);
//o:对象
//initialize:初始化方法,为对象o附加上作为事件源的各项功能。那么事件源都有什么功能呢?
static function broadcastMessage(msg:String);
//msg:消息
//broadcastMessage:广播方法,事件源的一个主要功能就是向外界广播一条消息,告知听广播的人"某一事件发生啦!"
static function addListener(o:Object);
//o:对象
//addListener:注册监听者方法,也就是决定广播消息给谁听的意思
static function removeListener(o:Object);
//o:对象
//removeListener:注销监听者方法,也就是消息不再广播给谁听
--------------------------------------------------------------------------------
如此看来AsBroadcaster类也不怎么复杂嘛,下面看看它的具体使用吧!

-----AsBroadcaster测试.fla 开始------
var 司令部=new Object();
//啊,司令部是个发布指挥消息的地方,用它做事件源是个不错的选择
AsBroadcaster.initialize(司令部);
//这里直接用AsBroadcaster来引用AsBroadcaster类,原因如上述
//调用AsBroadcaster类的静态方法initialize,为司令部附加上作为事件源的各项功能
var 步兵=new Object();
//生成步兵对象
步兵.on进攻=function(){
//on进攻: 这里之所以用'on'做前缀,是为了表明这个方法是响应一定事件的方法
trace("步兵接到司令部来电,轻装上阵,火速向敌方阵地前进!");
// 接到'on进攻'消息后采取的措施
}
步兵.on驻守=function(){
//同上
trace("步兵接到司令部来电,就地待命,多设岗哨,严防来犯之敌!");
}
司令部.addListener(步兵);
//将步兵添加为司令部的监听者,从现在起他将听从司令部的指令行事
//以下雷同的地方,恕不赘述
var 装甲兵=new Object();
装甲兵.on进攻=function(){
trace("装甲兵接到司令部来电,加足马力,火速向敌方阵地开进!");
}
装甲兵.on驻守=function(){
trace("装甲兵接到司令部来电,就地待命,检修装甲,作好随时进攻的准备!");
}
司令部.addListener(装甲兵);
var 炮兵=new Object();
炮兵.on进攻=function(){
trace("炮兵接到司令部来电,向敌方阵地猛烈轰击!");
}
炮兵.on驻守=function(){
trace("炮兵接到司令部来电,就地待命,保证弹药准备充足!");
}
司令部.addListener(炮兵);
//-------------------下面开始演示------------------------------------
trace("司令部一号指示");
司令部.broadcastMessage("on进攻");
//司令部用'broadcastMessage' 方法广播'on进攻'指令
trace("司令部二号指示");
司令部.removeListener(步兵);
//"将在外,君令有所不授",司令部用'removeListener'方法注销了'步兵'听从指令的义务
司令部.broadcastMessage("on驻守");
//司令部用'broadcastMessage' 方法广播'on驻守'指令。注意:步兵现在不会驻守哦
-----AsBroadcaster测试.fla 结束-----

      

  具体的测试结果,大家试试便知。现在我们看看AsBroadcaster类的局限所在:

   1、如果司令部发出的指令是"向一号高地进攻",这个消息应该怎么广播呢?我们当然可以为步兵定义一个'on向一号高地进攻'的方法,然后监听司令部广播的'on向一号高地进攻'的消息。可是如果需要发出N个'向某高地进攻'的指令,岂不是要定义N个类似的事件方法?如果进攻的目标是随即确定的,那又该怎么去写?如果步兵同时监听"战地指挥部"的广播,他怎样根据不同的指挥者采取不同的措施?步兵并不能确定一个'on进攻'消息是来自司令部还是'战地指挥部'呀。所以说,AsBroadcaster类的第一个局限就是它虽然广播了一个'消息',却不能给出消息的具体说明。

   2、我们知道战争时期为了做到策略的"因时因地制宜",常常会设一个"战地指挥部"。假设我们希望把步兵的进攻的指挥权交给"战地指挥部",而把步兵的驻守权交给"司令部"。因为司令部同时拥有装甲兵和炮兵的进攻与