显示对象等级结构:
1.容器
2.非容器对象
显示对象种类划分:
一个统一:所有显示对象都统一于DisplayObject类(继承至EventDispatcher)
两个层次:1.是否可接受互动事件
2.是否可以容纳其他显示对象
核心3个抽象类:DisplayObject,InteractiveObject(可接受互动事件),DisplayObjectContainer(可容纳其他显示对象)
AS3视觉架构类图:
DisplayObject
|
InteractiveObject ---- Bitmap(位图) ---- Shape(简单矢量图) ---- Video ---- StaticText ---- MorphShape ---- AVM1Movie
|
DisplayObjectContainer ---- SimpleButton ---- TextField
|
Sprite ---- Stage ---- Loader
|
MovieClip ------------------------------- mx.core.FlexSprite(Flex框架)
| |
mx.flash.UIMovieClip mx.core.UIComponet
Sprite:去掉时间轴的MovieClip,创建容器的首选
DisplayObject抽象类:不可直接创建其子类,只能继承DisplayObject的子类。
Graphics对象:AS3中所有矢量图的代码绘制由该对象完成,非显示对象类,不可创建Graphics对象,只由AS3内建显示对象创建调用。
绘画顺序:设置线头样式,填色,移动绘画点,画线(绘制图形),填色结束。只要含Graphics对象的显示对象都可以绘制矢量图(Shape,Sprite,MovieClip)
AS深度管理
深度由每个容器子对象列表管理。每个容器都清楚的知道自己一共有多少个子显示对象,总数记在numChildren中。每个对象在列表中索引值代表其深度值(范围0到numChildren-1),当子显示对象深度发生冲突,其他子显示对象会自动调整。
容器本身使用graphics对象画了矢量图,该矢量图始终处于所有子对象的最下面,可以把该矢量图做为背景图。
访问遍历容器子显示对象
访问一个容器的子显示对象有3种方式:
1.通过深度访问,使用getChildAt,访问速度最快
2.通过名字访问,使用getChildByName
3.通过全局坐标访问,使用getObjectsUnderPoint,返回一个数组,包括坐标下的该容器所有子对象
注意:返回值是DisplayObject类型,为一个抽象类。在进一步使用这个返回对象前,需要把他转成具体类型
未公开API:addFrameScript()
由于AS3也支持在MovieClip对象的关联帧中添加代码,实际由于未公开的API,在关键帧上加脚本
影片剪辑对象.addFrameScript(帧数1 索引值, 函数1,帧数2 索引, 函数2, 帧数3 索引, 函数3);