打印

[AS3] 【黑羽】AS3.0教程(5):强大的事件机制(上)

这几天在弄Blog的改版和首页的Flash。潜水几天后,今天冒个泡,嚯嚯 :D

BlueIdea首发!
(如蒙转载,请留下我的Blog链接:http://www.kingda.org, thx)

Event机制作为重头戏,在ActionScript 3.0中加强了很多。更加统一、易用、标准、灵活。
ActionScript 2.0中有众多的事件实现机制:

[ 本帖最后由 KingdaSun 于 2006-7-26 01:49 编辑 ]
本帖最近评分记录
  • mirycat 威望 +3 原创内容, 精品文章 2006-7-31 23:58
黑羽翔天◎足下八邦
欢迎来我的博客 :)
www.kingda.org  (AS3教程)

回顾和比较

AS1.0玩家最爱用onClipEvent(), on(),又方便又直接。缺点在于逻辑分散到了各个舞台元件中,难以管理和维护。更加别说代码重用了。别跟俺说可以Copy, Paste,这不叫重用,这叫低级。
AS2.0中,增加了一些事件处理机制:
1.回调函数: onLoad, onComplete等。相信兄弟们最熟悉的应该就是XML.onload回调函数了。
2.事件侦听器型:
这个就是addListener(), addEventListener()这种类型的。发送事件有的是内置,有的通过dispatchEvent().
嗯,这种事件机制基本上就和AS3.0很像了。自从使用了ActionScript 2.0来开发项目,黑羽就尽可能的多用这种事件处理机制。这个习惯很好,基本上让黑羽对3.0的机制很快适应过来。
说道这里,黑羽要多扯几句2.0,抱怨一下它的不足,再让大家看看AS3.0的光明大道。

(1).2.0中除了UIComponent能自己发送事件,绝大部分类不能自己发送事件的,比如MovieClip, 或者一些自定义的类。黑羽还制作了一个EventSender的事件发送类来解决。
当然你可以通过扩展来解决MovieClip这些类来解决,但是在<strong>一些轻量级或者特殊运用中</strong>,还是用黑羽这个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,真是简单的不能再简单了。(请尽量以正规方法为主,不推荐频繁使用,不是好的编程习惯)
<img src="/mt-static/smilies/laughing.gif" width="20" height="20" border="0" alt="laughing.gif" title="funny!" />

(2)2.0中,侦听器的记忆是"有毛病"的。如果是新手,会经常觉得侦听器函数的this关键字指向飘忽不定,常常弄错。而且看看高手的代码,一会儿是Object做侦听器,一会儿是function做侦听器,真是让人头痛。其实MacroMedia也很头痛,所以就出了Delegate这个官方类(补丁?)来解决这些问题。

(3)侦听器注册方式也有两种,一种是addListener(),如Key,一种是addEventListener(),如UIComponent类。为什么要这样搞两种?MacroMedia无辜的望着我,喃喃道偶也不完全清楚。

超人来了,那就是ActionScript 3.0事件处理机制:
(1)统一。全部一色用addEventListener().
(2)所有的可视对象都可以接受和发送事件。
AS3.0的类继承设计是深思熟虑的,所有的可视对象所属类都是DisplayObject的子类, DisplayObject又是EventDispatcher的子类。因此它们就都可以玩Event了,所以说,有个好的老子就是好啊。
而且有了崭新的事件冒泡机制,可以使事件层层上递到最上层的Stage,绝好的功能!
有了以上两点:黑羽的EventSender类也可以歇菜了。
(3)侦听器统一使用Function,不再使用Object了。 同时this关键字的记忆力“大大增强”,Delegate类也可以下岗了。
黑羽翔天◎足下八邦
欢迎来我的博客 :)
www.kingda.org  (AS3教程)
Event涉及到的内容极多,面很广。下面黑羽将从以下几个方面讲起:
一、如何接收事件?如何做到AS3.0的标准事件编程。
二、如何发送自定义事件?如何在OOP中正确使用AS3.0强大灵活的事件架构。
三种方式及其优劣,以及在何种情况下使用。
(1)用继承EventDispatcher实现
(2)用复合EventDispatcher实例来实现。
(3)用接口IEventDispatcher实现
三、如何使用冒泡机制(即官方所称的Event Flow机制)?以及冒泡机制的原理。
四、Event的其他高级应用。
<strong>P.S:本教程受Creative Commons License.协议保护,未经作者同意,不得用于商业用途。</strong>
黑羽翔天◎足下八邦
欢迎来我的博客 :)
www.kingda.org  (AS3教程)

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
等你写完我再打.....

TOP

this关键字的记忆力“大大增强”
没看全文,就看这一句,我就对as3放心了:0

TOP

恩. 函数可以记住自己是谁.. -_-

TOP

引用:
原帖由 mirycat 于 2006-7-27 10:31 发表
等你写完我再打.....
晕啊,那不是要等我把Event全部写完再打分吧。好惨。
那至少还有两节。周末写完它。
黑羽翔天◎足下八邦
欢迎来我的博客 :)
www.kingda.org  (AS3教程)

TOP

引用:
原帖由 awflasher 于 2006-7-27 13:47 发表
this关键字的记忆力“大大增强”
没看全文,就看这一句,我就对as3放心了:0
所有玩AS2.0开发的人看到这一句都会有相同感受吧。:D
不说,说来有意思,我后来其实还习惯了AS2.0事件机制中this关键字的水性杨花,还利用它这个特性做过动态绑定对象。
黑羽翔天◎足下八邦
欢迎来我的博客 :)
www.kingda.org  (AS3教程)

TOP

已经习惯了Delegate了.
http://www.gouyou.de 狗友社区

TOP

其实不用都使用MC来广播的,我一直使用AsBroadcaster来广播事件。
自由度很高,可以任意广播自己需要的事件。

TOP

喜欢3.0的风格,统一完善,比较好用,用了3天把帮助手册看了一边,感觉和c#太像了
ColorWingCode代码生成器
不用手写一句代码,强大的代码生产工厂,VSDN.NET强势出击
www.vsdk.net
www.colorwing.net
彩翼工作室

TOP

关注冒泡机制,层层上传到stage
高深啊
希望黑羽速度出教程

TOP

顶先

棒,顶上来.

TOP

回复 KingdaSun 在 2# 的帖子

需要好教程

TOP

引用:
原帖由 jjl123456 于 2007-8-14 22:23 发表
喜欢3.0的风格,统一完善,比较好用,用了3天把帮助手册看了一边,感觉和c#太像了
我就觉得和J2EE很像
C#也是这样的么?那就好学了。
yiyiflashstudio.com

TOP

Event机制作为重头戏

>>
CS3 中在编程方面最大的动作就是引入了这个机制,大家有空去新华书店去看一下,很多出版的Flash CS3 的书籍,在书上讲解编程仍用 CS 2风格讲解,根本就没有使用CS3中的Event机制进行讲解,那还不如把书名改到FLAHS MX2004 得了

绝大部分 Flash CS3 的书籍 中在讲解案例时是在CS2的环境中直接在按钮上加代码,但其实在 Flash CS3 中不支持直接在按钮上加代码了,而支持在时间轴上编写代码
正因为这些作者的不负责,使得有不少人在CS3的环境中摸不着头脑了
如在这个论坛中就有这么一个贴子

经典论坛 » Flash CS3 及 AS3 » 在FlashCS3中如何为按钮添加动作代码?
http://bbs.blueidea.com/thread-2782581-1-66.html






Flash 版本历史

FutureSplash Animator (1995) - Flash的前身,由简单的工具和时间线组成 ;
Flash 1 (1996-11) - Macromedia给FutureSplash Animator更名后为Flash的第一个版本 ;
Flash 2 (1997-6) - 引入库的概念 ;
Flash 3 (1998-5-31) - 影片剪辑,Javascript插件,透明度和单独播放器 ;
Flash 4 (1999-6-15) - 变量,文本输入框,增强的Actionscript,流媒体MP3 ;
Flash 5 (2000-8-24) - Javascript, 智能剪辑, HTML文本格式 ;
Flash MX (2002-3-15) - Unicode,组件,XML,流媒体视频编码 ;
Flash MX 2004 (2003-9-10) - 文本抗锯齿,Actionscript 2.0,增强的流媒体视频,行为 ;
Flash MX 2004 Pro (2003-9-10) - 包括所有Flash MX 2004的特性,加上Web Services, ActionScript 2.0的面向对象编程,媒体播放组件 ;
Flash 8 (2005-9-13) ;
Flash 8 Pro (2005-9-13) 增强为移动设备开发的功能,方便创建Flash Web,增强的网络视频 。
Flash CS3(2007)Adobe公司收购Macromedia公司后,首次推出的版本,最新的as3.0编程语言替换原来的as2.0编程语言。
Flash CS4(2008)现在的最新版本

[ 本帖最后由 chsm5000 于 2008-10-3 17:13 编辑 ]

TOP