as3.0显示对象类结构

as3.0显示对象类结构
先给两张图对比一下
 [img=http://img.bbs.csdn.net/upload/201512/26/1451116222_769971.jpg][/img]


[img=http://img.bbs.csdn.net/upload/201512/26/1451116202_988338.jpg][/img]








20.1 什么是显示对象
在舞台上显示的对象,在AS3中统一被称为显示对象(Display Object)
显示对象除了包含能看得见的显示对象外,也包括不能看见但却真实存在的显示对象容器(Display Object Container)




20.1.1 ActionScript3 中显示对象等级结构
舞台(Stage)
当前SWF(文档类或MainTimeline)
容器
显示对象




20.1.2 显示列表:显示对象模型
AS3中所有显示对象归使用显示列表(Display List)的方式进行管理,只有在列表中列出的对象才会在舞台上显示。
显示对象有两种:在显示列表中(on-list)和不在显示列表中(off-list),在显示列表中的对象会被渲染,不在显示列表中的对象依然存在,不被渲染罢了。




20.2 ActionScript3中显示对象的种类
20.1 ActionScript2中的MovieClip
MovieClip是万能的,但缺点是一旦创建,就拥有了一大堆时间轴等属性,非常浪费资源,有时候只将它作为空白容器。
MovieClip的地位在AS3中减弱了很多。




20.2.2 ActionScript3显示对象种类划分:一个统一、两个层次
一个统一,AS3中所有显示对象都统一于DisplayObject类
第一大层次:是否可以接受互动事件,可以接受的,称为 可互动的显示对象(InteractiveObject);
不可以交互的,称为非互动显示对象.


可互动的显示对象(InteractiveObject):指能够接受鼠标单击、键盘敲击等人机交互事件。
位图、形状、视频等就不能接受这些事件,所以归入不可以交互类。


第二大层次:是否可以作为容器,可以容纳其它显示对象的,称为 显示对象容器(Display Object Container)






20.3 显示对象类库架构
以下很好反映了  一个统一、两个层次  这个概念


所有显示对象都是继承自父类DisplayObject这个抽象类,而父类DisplayObject则继承自EventDispatcher类,
说明所有显示对象都能发送事件。


DisplayObject、InteractiveObject、DisplayObjectContainer是显示对象架构中的三个核心对象,
它们都是不能被实例化的抽象类




视觉架构类图:
EventDispatcher(事件类)
           |
           |
根类 DisplayObject(抽象类,不允许实例化,只能实例化子类)
           |  
           |  
InteractiveObject(可以交互) ---------   (不可以交互)  |---- Bitmap(位图) - Shape(容器)
           |                                          | Video(视频) - AVM1Movie(AS1.0 2.0影片)            
     |                                          L [StaticText(静态文本框)* - MorphShape(形状补间)*]
           |                                               有*的为必须在舞台上手动创建
           |  
           |  
DisplayObjectContainer(可以作为容器) ---------  (不可以作为容器) [SimpleButton(简单按钮) - TextField(文本框)]
           |  
           |  
           |  
Sprite(简单容器,简化版MovieClip)  ---------  Stage(舞台) - Loader(加载)
           |  
           |  
           |----------------------- mx.core.FlexSprite - mx.core.UIComponent(Flex)
           |  
           |  
           |--------- MovieClip(影片剪辑)
                       |  
                       |  
                       L mx.flash.UIMovieClip








20.3.1 InteractiveObject类和非InteractiveObject类
InteractiveObject类    可以接受人机交互事件
非InteractiveObject类  不可以接受人机交互事件
不可以接受人机交互事件的类中有6个同级对象 :
AVM1Movie、Bitmap、MorphShape、Shape、StaticText、Video


其中再细分  MorphShape 和 StaticText不可以用代码创建
StaticText是Flash编辑环境下用文本工具创建的
MorphShape是在flash中创建形状渐变时自动生成的


AVM1Movie: Actionscript Virtual Machine1(ActionScript虚拟机1),即使用AS1.0 AS2.0创建的Flash影片,
为了向下兼容,当载入使用以上版本AS创建的影片时,会自动创建这个类,以同AVM2区分开来。






20.3.2 容器类和非容器类
第二层是InteractiveObject类的对象
包含三类,使用容器与非容器的概念来区分。
容器:可以在它里面加载其它的DisplayObject的容器
非容器对象:TextField、SimpleButton
TextField就是动态文本框


SimpleButton是Flash API


剩下的就是DisplayObjectContainer(显示对象容器)类,其下有:
Sprite、Loader、Stage
Stage是舞台类
Loader是原有MovieClip中加载外部资源的方法集合。


20.3.3 Sprite 和 MovieClip
Sprite将是我们在AS3中接触最多的容器,可以把它理解成去掉时间轴的MovieClip。
Sprite中含有Graphic对象,可以像MovieClip那样直接在自身绘图,但Sprite不同于Shape,
区别在于Sprite是容器,而Shape不是。


MovieClip是Sprite的子类,只保留了一些与时间轴控制相关的gotoAndStop方法和currentFrame属性等。




20.3.4 非Flash API的几个显示对象类
需要在Flex中使用到的显示对象,必须是UIComponent类的子类或实现IUIComponent的接口(Interface)






20.4 ActionScript3 视觉架构的优越性
20.4.1 更高效的渲染,更好的内存利用
AS3中影片剪辑被弱化成
绘制矢量使用轻量的Shape对象,
需要容器使用轻量的Sprite对象,
降低了时间轴的使用,也同时降低了内存的浪费。




20.4.2 自动化的深度管理
AS3中的显示对象深度由程序自动管理。
每个DisplayObjectContainer实例都有numChildren属性,用于显示对象容器中的子对象数目
显示对象容器列表中对象的索引从0开始,到numChildren-1




20.4.3 完整遍历显示列表
在AS3中,可以访问显示列表中的所有对象,包括使用ActionScript创建的对象及在IDE中绘制的对象。




20.4.4 列表外的显示对象
只有在显示列表中的对象才会被显示在舞台上,添加到显示列表的方法是调用addChild()或addChildAt()








================================================
第21章 DisplayObject类与矢量图、位图
================================================
21.1.1 显示对象的可视属性列表
AS3中所有原有对象的属性前面的下划线都去掉了,直接使用字母 ,比如 _x _y _alpha 之类变成x y alpha
注意的是:
scaleX scaleY alpha 之类原来0-100的值,在AS3中变成了0-1,其中的百分比使用小数
显示对象基本有11个可视属性(共有25个):
x、y、width、height、scaleX、scaleY、mouseX、mouseY、rotation、alpha、visible


21.1.2 显示对象的其它属性
显示对象除了11个可视属性外,还有5个常用属性和9个不太常用的属性。
除此之外,DisplayObject还拥有6个实例方法,能发出6种事件。


5个常用属性:
name:   显示对象名字,与AS2不同的是,创建对象时,name会自动分配
parent: 父容器,指向显示列表的父容器,当显示对象不在显示列表中时,该属性为null
root:   返回当前SWF主类的实例引用。
stage:  舞台
mask:   遮罩,指向用来遮罩的对象。






21.2 所有显示对象的抽象父类:DisplayObject类
DisplayObject类是一个不能被实例化的抽象类,也不能创建直接继承DisplayObject的子类,而只能继承自DisplayObject具体子类
DisplayObject类具有7个子类,分成两类,一类是InteractiveObject抽象类,
另一类是非InteractiveObject类的六个具体类,这六个类都是直接继承自DisplayObject类,不是InteractiveObject的子类,
因此不能接受鼠标事件,也不会发出人机交互事件。


21.3 矢量图
Shape类是最简单的DisplayObject类型,与父类不同的是它多了一个graphics的实例属性,这个属性持有Graphics类对象的引用。


21.3.1 Graphics对象
Graphics对象只能由AS3内建的显示对象创建并调用,所有的矢量图形代码绘制均使用它创建。
Graphics对象并不是显示对象类,而是直接继承自根类Object。也没法用代码创建Graphics对象。
Graphics对象绘制方法分类(详细见P341 或帮助 flash.display > Graphics 相关方法属性)


使用代码绘图时,一般遵从顺序:设置线头样式、填色、移动绘画点、画线或绘制图形、结束填色(endFill())。
设置线头样式、填色都是可选的。


只要含有Graphics的显示对象都可以绘制矢量图。
AS3中拥有Graphics对象的DisplayObject子类有3个:Shape、Sprite、MovieClip,Shape只支持纯矢量图,Sprite可以容纳矢量图与其它对象。




21.3.2 绘制矢量图的例子
var 显示对象:Shape = new Shape();
显示对象.graphics.beginFill(0xff0000);
显示对象.graphics.drawCircle(100,100,40);
显示对象.graphics.endFill();
addChild(显示对象);




本文转载自http://blog.sina.com.cn/s/blog_6f46a6ca0101b2d8.html,感谢博主分享!!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值