- 浏览: 50081 次
- 性别:
- 来自: 青岛
最新评论
DisplayObject,直译为视觉对象,意为可以被看到的对象。
视觉是Flash 成功的主要基石。当我赏析ActionScript 3 的所有视觉元件类型和其整体构架时,感到非常满意。可以看出,这次整体的架构设计是深思熟虑的结果。与其他语言,比如C#,相比有自己强烈的特色,是对Flash视觉行为贴身定做的结果。
ActionScript 3的架构乍一看很复杂,不包括UIComponent的子类,就有7到8个层,20多个莫名奇妙的类。头疼!但实际上,它的设计是非常的简洁优雅,远远比ActionScript 2一个MovieClip打天下强太多了。实际上,只要真正弄清了它的设计思路,就可以高屋建瓴,一览无余,会发现这个架构逻辑清晰,非常的易懂易记。所以,先抛开ActionScript 3 的帮助文件,我们一起来看看为什么要设计这样一个架构,搞出20多个怪胎出来。
(如蒙转载,请留下我的Blog链接:
www.kingda.org
, thx)
先来追忆一把ActionScript 2中无所不能的先贤: MovieClip(影片剪辑)。 这位兄台无所不能:可在其中画矢量图,可在其中贴位图;可在其中做影片,也可嵌套子影片;偶尔用来加载,闲来客串按钮;三教九流皆可放,肚皮天下第一广。它的父亲何人,原来是元始天尊Object。
这样的玩意儿,新手用起来很爽,大大节约了脑细胞。但任何一个有过大型OOP项目经验的老手,都会毫不犹豫的指出,这样的架构设计是失败和混乱的。代价是巨大的。MovieClip类公开的属性和方法共有一百多个(自己数数)!居然直接继承根类!居然拥有这样多公开(public)属性和功能的类!居然应用范围如此广泛!
首当其冲,其第一弱点就是系统资源的浪费。
举个例子, 我新建一个空MovieClip A,只是想让它做个容器,好在里面放几个有内容子MC。这样我操作A的位置和渐变时,子MC会统一变化。这样的经验大家都有吧。可就是这么一个简单的纯容器A,ActionScript 2&1都会毫不犹豫的把MovieClip所有的属性和方法都赋给A。谁让A是MovieClip类的实例呢?可在这个应用上,我们要A的其他90多个功能干什么呢?而且还不算最耗资源的内建的对Timeline的支持!大家想想,我们每天都在创建MC。但事实上我们做开发时,创建的MC有多少用到了大部分的功能和Timeline?只有一部分的通过Flash创建的MovieClip才需要时间轴的支持,其余大部分根本不需要时间轴支持。这样的设计是不是有问题呢?
痛批了一顿ActionScript 3之前的MC后,我们不得不说几句公道话:这样的错误是有其历史局限性的,我们不能苛求古人。且看现在的视觉元件架构,那叫一个爽。爽,就爽在系统设计师对整个Flash视觉系统的抽象上。抽象和解构的功力很深!不得不佩服!系统各个超类和子类的设计划分,职责清晰,稳健高效,堪称优雅!我看.Net FrameWork 的System.Drawing架构设计时都没有这个感觉。毕竟Flash是靠视觉起家,与视觉动画交互打交道最深阿。
下面来欣赏ActionScript 3 的元件架构。
ActionScript 3 中所有可以被看到的视觉元件都统一于DisplayObject,即其子类的实例。DisplayObject是一个抽象类,不能生成实例。从系统架构设计上来说,这样的超类设计是常识。DisplayObject,我在
AS3.0教程(5):强大的事件机制(1)
中讲过,继承于EventDispatcher类,也就意味着所有的DisplayObject子类都可以发送事件了。
啊哈,DisplayObject下面一层的抽象就精彩了,架构设计师的原意是将所有视觉元件分为两大类:可以接受人机交互事件的,和不可以接受人机交互事件的。所以就有了InteractiveObject类和非InteractiveObject类之分。由于非InteractiveObject的几个类之间差别太大,也抽象不出什么共同点,所以,干脆就分成了InteractiveObject的六个同级兄弟 AVM1Movie, Bitmap, MorphShape, Shape, StaticText, Video。但黑羽认为从系统的优雅性出发,不妨就设一个UnInteractiveObject的超类,将这六个孩子放在这个超类的下面。还便于日后的功能扩展。
在讲最重要的InteractiveObject之前,我们先把这几个不伦不类的兄弟先扫掉。这几个子类中,我们把它分为可以代码创建的,和不可以代码接触的。所谓不可以代码创建的,是指只能通过Flash创作工具来创建的。和以前一样,StaticText还是不可以用代码实现。另外一个是MorphShape,这个东东是指在Flash中创建Shape形变时,由Flash Player自动生成的,同样的,代码无法实现。
剩下的几个都是可以用代码创建的:Bitmap,位图对象,可以通过BitmapData对象来创建,也可以从外部载入,比如通过loader。Shape,形状,专门用来绘制矢量图的,通过Graphic对象创建的。Video,视频对象,专门用来播放视频的,可以来自文件也可以来自网络流媒体。
本文转自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/1798.html
发表评论
-
FLV播放器汇总
2010-04-10 11:54 568http://www.dengjie.com/weblog/c ... -
Flash Media Server 起步(9)在线列表
2010-04-10 11:54 560学了这么多,智商跟我差不多的,概念应该都搞混了 学了就要用 ... -
Flash Media Server 起步(9)在线列表
2010-04-10 11:54 601学了这么多,智商跟我差不多的,概念应该都搞混了 学了就要用 ... -
Flash Media Server 起步(10)中文编码问题
2010-04-10 11:54 893是一个郁闷我一段时间的问题才想到了答案。。。话说曾经在公司做了 ... -
Flash Media Server 起步(10)中文编码问题
2010-04-10 11:53 525是一个郁闷我一段时间的问题才想到了答案。。。话说曾经在公司做了 ... -
彻底接触AS3视觉元件架构
2010-04-09 13:24 643DisplayObject,直译为视 ... -
不够50行代码的AS3歌词显示
2010-04-09 13:24 888引用内容 该文章为Demo用途,请见谅… 该文章来自猫粮的bl ... -
不够50行代码的AS3歌词显示
2010-04-09 13:24 921引用内容 该文章为Demo用途,请见谅… 该文章来自猫粮的bl ... -
AS3写的web 2.0 风格
2010-04-09 13:23 592在往上逛的时候发现 一篇日志 ,用 AS3 写出了 Web 2 ... -
【as3】ActionScript 3.0体验试教学视频教程
2010-04-09 10:27 563很不错的视频教程 原文地址: http://blog.sina ... -
as3 使用sound类(翻译)-暂停和继续播放声音
2010-04-09 10:27 618[1b]问题十[/1b] 如何暂停声音,如何从暂停的地 ... -
AS3.0中的位图扭曲变形
2010-04-09 10:27 1433DisplacementMapFilter 类使用指定的 Bi ... -
AS3.0中的位图扭曲变形
2010-04-09 10:27 1299DisplacementMapFilter 类使用指定的 Bi ... -
[JS]FlashUpload上传模块
2010-04-09 10:26 1166[AS3][JS]FlashUpload上传模块 P.S.F ... -
flash打造碧海浪涌海鸥飞美丽动画
2010-04-08 10:47 642文中我们用flash绘制一幅好看的动画场景:碧海、蓝天、白云、 ... -
flash制作飘落的红叶视觉动画
2010-04-08 10:47 628接着"蝶恋花"的练习, 我们举一反三再来学 ... -
flash制作飘落的红叶视觉动画
2010-04-08 10:47 595接着"蝶恋花"的练习, 我们举一反三再来学 ... -
漫画绘制技法大放送(上)
2010-04-08 10:46 573网络收集整理(jundark) [1b]一、人体基本结构[/1 ... -
flash动画形变讨论二:低头
2010-04-08 10:46 504上次说了基本的形变,现在说下提示点,提示点是控制图形变化的基本 ... -
指针随鼠标移动的flash卡通时钟
2010-04-08 08:59 572。先看下时钟效果: var fnum:Number = ...
相关推荐
AS3库元件改名脚本,直接往软件里面拖拽就可以,灰常简单实用
由于带滚动条的动态文本框无法竖着显示文字,于是通过把文本框转换成元件,遮罩层盖在内容层上,实现拉滚动条,元件左右移动,在遮罩层的帮助下,实现竖排文字左右移动的效果,然后通过代码加入移动的缓冲效果,注意...
as3声音架构的理解.pdf,as3声音架构的理解.pdf,as3声音架构的理解.pdf,as3声音架构的理解.pdf
Flash as3调用外部AS脚本 很小的示例
flash actionscript3游戏开发之 as3斜45度可移动物品可A*寻路.rar
AS3滚动条,可自定义横向还是竖向,带源码
IAS2017- 敏捷架构设计IAS2017互联网架构峰会
2016AS全球架构师峰会【北京站】PPT.part3
flash as3自定义组件开发
2017AS全球架构师峰会【深圳站】PPT part2
这是一个用as3.0写的访问舞台手工制作的元件的方法,比较简单,适合as3.0初学者快速上手.分为两种方法实现,一个是纯as脚本访问。一个是在动画帧中和as脚本中写代码实现。对于这两种访问方法不清楚的学者可以学习...
我找了半天都没有找到AS3的 单个图片,复制成多个循环使用,然后,逐个删除。 现在我贡献下写法,希望可以帮助as3的新人。 源代码可以打开直接看,也可以用fb 导入工程看效果。 导入时,请将swc文件载入下,否则...
flashAS2和AS3代码编写,实现:缩放SWF,其swf中的元件也适应适应其缩放自动改变大小位置。
as3常用属性语句整理
AS3惯性拖拽算法以及源文件。 拖拽一个物体,抛出后,根据抛出速度计算出滑行时间。
Flash as3 曲线运动 启动Flash软件后,在图层1上,导入一张图片,转换为元件后,在30帧处插入关键帧。 然后新建一个引导层,在引导层上画一条曲线。 在图层1的第一帧处,拖动图片元件放置到曲线的左端;在第30帧处...
2017AS全球架构师峰会【深圳站】PPT part2
v2x@ubuntu:~/Desktop$ sudo cp ./libpaho-mqtt3as.so/libpaho-mqtt3as.so /usr/lib/ v2x@ubuntu:~/Desktop$ sudo cp ./libpaho-mqtt3as.so/libpaho-mqtt3as.so.1 /usr/lib/ v2x@ubuntu:~/Desktop$ sudo cp ./...
车载基础软件——国产基础软件架构ASF的生态架构设计和关键技术分析
//0.0 这是一个数字雨的元件,我反正就用了3个,不知道在密集会不会更好 addEventListener(Event.ENTER_FRAME ,xx);//每当进入下一帧就会触发事件 function xx(event:Event):void { var my1:rain=new rain ;//数字...