`
wangangie1
  • 浏览: 39303 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

AS3.0教程:强大的事件机制(6)

阅读更多

 事件机制写的太多了,我自己都有点烦了。
但没办法,

,太重要了。而且AS3做了这么多好的改进,值得我们去一一探寻,给我们日后的编程带来极大的便利。ActionScript 初学者,本节可以跳过不看。
ActionScript 2熟练工应当看看,有些价值。
今儿讲掉
4. 合成EventDispatcher进行事件发送。
5. 实现IEventDispatcher接口来进行事件发送。 与设计模式中的装饰器模式相似。
这样事件的发送和接受,就可以讲完了。
那么,事件部分就这样完了?没有!你晕,我也同晕。因为还有一个很重要的特性,Event flow机制还没讲。这就是我所说的事件冒泡机制。给我们编程带来了莫大的方便。
好,下面先讲:
[1b]4. 合成EventDispatcher进行事件发送。[/1b]
什么情况下用合成EventDispatcher来发送Event呢?
一般发生在某个较复杂的类里面。
这个类可能是因为本身已经继承了其它类,无法再继承EventDispatcher。
如果仅仅是因为这个原因,那么我更加建议[1b]使用 实现IEventDispatcher接口来进行事件发送。[/1b]
但如果原因不止如此,比如,我们不愿意这个类不是一个单纯事件发送类,而是在执行某个方法(method),比如doSomething()时,附带的发送一些事件。
这些事件发送者往往是这个类的组成部分,一些更小的类,通常是Sprite等。
那么用这种做法就比较合理。
看代码例子
  //【黑羽】ActionScript 3.0系列教程
  //http://www.kingda.org
//以下为一个名叫KingdaSampleClass的Document Class,请自行和一个Fla绑定。
//如果忘了怎么弄,看我第三篇教程
package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    public class LearnCompositeEvents extends Sprite {
public function LearnCompositeEvents() {
var kingdaObj:KingdaClass = new KingdaClass();
                      //一定要用kingdaObj.getSender()来返回事件发送对象,才能addEventListener
                        kingdaObj.getSender().addEventListener(KingdaClass.ACTION, lisFunc);
kingdaObj.doSomething();
                        //输出:
                        //doSomething
                        //listened:yeahyeah 
}
//侦听器
private function lisFunc(evtObj:Event):void {
trace ("listened:"+evtObj.type);
}
}
import flash.events.EventDispatcher;
import flash.events.Event;
class KingdaClass extends EventDispatcher {
public var _dispatcher:EventDispatcher;
public static const ACTION:String = "yeahyeah";
public function KingdaClass() {
initSender();
}
private function initSender():void {
_dispatcher = new EventDispatcher();
}
               //调用一个专门的方法(method)来返回发送事件的EventDispatcher。
public function getSender():EventDispatcher {
return _dispatcher;
}
public function doSomething():void {
trace("doSomething");
                        //除了以下两行发送事件,还可以写入其它你要干的事儿。灵活。
var evtObj:Event = new Event(KingdaClass.ACTION);
_dispatcher.dispatchEvent(evtObj);
}
}
}
 
[1b]5.实现IEventDispatcher接口来进行事件发送。[/1b]
在哪种情况下使用?
类可能是因为本身已经继承了其它类,无法再继承EventDispatcher。
而我们恰恰希望它能实现EventDispatcher类所有功能,比如说addEventListener, hasListener等等,看起来简直和继承EventDispatcher没什么分别。
那么OK,我建议使用 实现IEventDispatcher接口来进行事件发送。
[1b]其实质是一个装饰器模式(Decorator),以对客户端透明的方式扩展对象功能,是继承关系的一个替代方案。其关键在于扩展是完全透明的,使用起来和继承父类几乎没什么区别。
[/1b]
具体方法
由于IEventDispatcher需要实现5个接口,addEventListener, hasListener, willTrigger,removeEventListener,hasEventListener,那么我们的装饰类也必须实现这五个接口。
其余看代码
优点:
1.类的用户完全感觉不到差别
2.在被包装的方法中还可以加入其它自己希望加进去的动作,比如,在addEventListenr方法中可以再插入一个计数,看看到底被add了多少次,超过某些次后,调用某个方法等等。
本文转自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/1766.html
分享到:
评论

相关推荐

    AS3.0的加载机制

    还是坚持自己的原则,从适用的角度做记录!下面分别讲述AS3各加载事件与类! 转

    AS3.0语言在Flash编程中的应用

    摘要 1、绪论 ... 2、AS3的事件侦听机制 3、在AS3中改变对象的位置和缩放对象 4、演示 3、XML的运用 1、新建FLASH 2、创建 viewer.as 的类 3、创建pics,xml 的文件 4、总结 5、致谢 6、参考文献

    flex事件机制的demo

    Flex ActionScript3.0事件机制的Demo, 举例说明了事件的三个阶段,事件的派发,事件的侦听,事件的拦截,自定义事件等相关知识点. 以上知识点在Demo中都有体现,初学者请仔细分析代码,加强理解,多调试、修改、验证以加深...

    AS3中的事件处理.txt

    事件处理系统是交互式程序设计的重要基础。利用事件处理机制,可以方便的相应用户输入和系统事件。ActionScript 3.0的事件机制基于文档对象模型(DOM3)。

    新版Android开发教程.rar

    � 具有强大的 Linux 社区的支持。 Android Android Android Android 的不足 � 由于采用了 Java 作为应用开发语言,目前可用的传统第三方应用还很少,但由于 Android 是一款完全 开 源的移动计算平台,相信第三方...

    Gaia Framework V3.2.6 - 最新版本

    Gaia强大的自定义和事件侦听功能使用户可以很方便的更改网站逻辑。此外Gaia还整合了SWFAddress,GreenShock Tween,采用MVC,Singleton等设计模式和业界流行的最佳解决方案(Best Practice)。Gaia还提供了配套的...

    CLR.via.C#.(中文第3版)(自制详细书签)

    4.2.1 使用C#的is和as操作符来转型 4.3 命名空间和程序集 4.4 运行时的相互联系 第5章 基元类型、引用类型和值类型 5.1 编程语言的基元类型 5.1.1 checked和unchecked基元类型操作 5.2 引用类型和值类型 5.3 ...

    vc++ 开发实例源码包

    6:自定义快捷键. 7:在IE工具栏上加按钮,可以直接拖动连接到按钮上下载. 8:注册采用激活方式. 9:采用Messenger的弹出滑动消息提示框. 10:下载管理,虚拟文件夹. 11:自动ping. 12:连接到搜索引擎. 13:自动报告bug,建议...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    1.2.5国内外应用现状 6 1.2.6 研究现状总结 7 1.3研究目标与内容 7 1.3.1多窗口浏览器模式的实现机制 7 1.3.2跨域交互即缓存处理方法 7 1.3.3页面自适应机制,即设备自适应与浏览器自适应机制 8 1.3.4 “认我测”...

    Hibernate 中文 html 帮助文档

    20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 20.1.7. Schema 校验 20.1.8. 使用Ant进行schema校验 21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的...

    Servlet3.1规范(最终版) PDF

    版本 3.1(最终版) Shing Wai Chan Rajiv Mordani [作者] 穆茂强 张开涛 [译者] 2012年6月翻译 2013年7月修订 目录 前言 ............................... 3 其他资料 ...........................................

    Java™ Servlet 规范.

    6 概览 .............................. 13 1.1 什么是 Servlet? ..................................................................................................................................13 1.2 ...

Global site tag (gtag.js) - Google Analytics