版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第11章 显示对象容器,前两章介绍到的对象都是二维概念的显示对象。ActionScript中有一类对象在二维空间的基础上增加了z轴顺序,虽然达不到z轴坐标的精确程度,也无法表现3D空间效果,但是z轴顺序的引入无疑也提高了显示对象的表现力,这类对象被称之为“显示对象容器”。通常z轴顺序也被称之为深度。 在z轴顺序之外,如果再加上时间这一个维度,显示对象就成为了一个四维对象,就可以表现对象的运动变化。ActionScript通过“时间轴”来描述时间维度。同时具有深度和时间轴的是MovieClip类,它也是使用最为广泛的显示对象。,11.1 显示对象容器概述,显示对象容器在ActionScript中
2、是一个抽象类,称为DisplayObjectContainer。它不能被直接实例化,但却描述了子类的共同性质:深度。DisplayObjectContainer的子类包括Loader、Sprite和Stage。 显示对象容器的命名非常形象,它就象一个真正的容器。其它显示对象可以加载到容器中去,对容器进行操作,也同时会影响到容器内的对象。例如,对容器进行变形或缩放时,它包含的对象也会一起变形或缩放。如果从显示列表中删除容器,则它所包含的所有对象也会被删除。 显示对象容器内的显示对象通过深度组织,每个对象获得一个索引值。这个值越小则显示对象越靠下,越大则越靠上。视觉上,上面的对象会遮盖住下面的对象
3、。,11.1.1 添加子对象,显示对象容器的概念始终围绕着它所包含的子对象(child)。可以使用addChild方法将子对象加载到容器中,其语法如下。 容器.addChild(子对象); 例如,以下代码将一个名为child的Shape实例加载到名为container的Sprite实例中。 var container:Sprite = new Sprite(); var child:Shape = new Shape(); container.addChild(child);,11.1.1 添加子对象,注意:当容器container加载了子对象child后,容器和子对象都还处于无法显示的状态。
4、需要把它们再“装入”舞台这个最大的容器中。即使用如下语句令舞台加载container 。 stage.addChild(container); 在这一过程中,stage是容器,而container成了子对象。当舞台加载了子对象后默认显示该对象,这就是我们学说的“加载到显示列表”。而一般主时间线为文档类的实例,因此在Flash CS3的主时间线上,加载到显示列表的代码也常可以省略地写为以下两种形式。 this.addChild(container); addChild(container);,11.1.2 子对象的深度,子对象的z轴顺序表现为深度,深度可以认为显示对象容器中各个对象的层叠顺序。当
5、一个子对象使用addChild方法加载到容器中时,ActionScript自动为其分配一个索引,最先加载子对象的索引为0,以后顺次增加。索引较小的对象会显示在索引较大对象的下方。 例如,以下代码中container先加载child1,再加载child2。因此,child1会显示在child2的下方。 container.addChild(child1); container.addChild(child2);,11.1.3 numChildren属性,一个显示对象容器中有几个子对象,就有几个完全不同、由0开始递增的索引。可以使用容器的childNum属性取得子对象的个数,如下列代码。,11.1
6、.3 numChildren属性,当已知numChildren时,子对象的索引顺序就是由0变化到(numChildren-1)。一般ActionScript会用numChildren作为遍历容器时的参数使用,如下列代码。 如果numChildren值为0,则表示当前的容器中不含子对象,11.1.4 对深度索引的控制,ActionScript在加载时,除了默认的加载顺序外,也可以使用addChildAt方法指定子对象的深度索引,其语法如下。 容器.addChildAt(子对象,索引); addChildAt可以自由指定加载子对象的索引值,可以指定新加载的子对象位于任意其他子对象之间。,11.1.
7、5 删除子对象,从一个显示对象容器中删除子对象时使用removeChild或removeChildAt方法,其语法如下。 容器. removeChild (子对象); 容器. removeChildAt (索引); removeChild直接删除参数指定的子对象,removeChildAt则会删除处于索引值深度的子对象。明确知道子对象时可以直接使用removeChild方法,有些情况无法了解具体加载到容器中的子对象,则可以通过索引值将其删除。 例如,经常使用以下的循环结构删除容器中的所有子对象。 /只要当前容器的子对象数不为0,即删除索引0处的子对象 while(container.numCh
8、ildren0) container.removeChildAt(0); ,11.1.6 getObjectsUnderPoint方法,getObjectsUnderPoint是显示对象容器用于检测“碰撞”的方法。它可以返回某一点上容器所有子对象(包括孙,曾孙)的数组结构。其语法如下。 容器.getObjectsUnderPoint(点); 说明:这里的“点”指的是一个Point实例。 一般来说,鼠标侦听器的节点对象是处于最上层的显示对象。例如当一个按钮被另一个按钮遮住时,将无法作为节点对象接收事件。此时可以使用getObjectsUnderPoint方法,它将返回一个数组,包含所有位于指定点
9、的对象。,11.2 Stage类,Stage类是一个非常有代表性,也是一个特殊的显示对象容器。所有呈现在用户面前的显示对象都需要加载到舞台之后才得以显示。同时Stage类也有其特殊性。,11.2.1 独一无二的stage,Stage不同于一般的显示对象或容器,它不能实例化,不可以使用new Stage这样的构造函数。这是因为Flash在初始化时已经建立了一个独一无二的Stage实例stage(注意大小写)。一个Flash影片同时只能有一个舞台实例。 stage由于其存在的特殊性,所以一些属性设置虽然能够应用于普通的显示对象容器中,但是却不允许应用于stage。,11.2.2 stage的全局属
10、性,stage(Stage的唯一实例)具有多个属性。通过设置这些属性,可以影响整个Flash影片。以下我们介绍常用的几个全局属性。 frameRate属性: frameRate属性可以获取或设置舞台的帧频,它能够接受的有效数字从0.01到1000。新建Flash文件的帧频为12fps,如果要求较好的动画效果,一般会设置为24,30甚至60不等。由于内部刷新机制的影响,帧频一般来说并不稳定。有时应该描绘的显示对象较为复杂,会拖慢显示。因此,一般不使用frameRate作为计时器,也很难根据当前播放的时间来获取实际播放的帧数。,11.2.2 stage的全局属性,quality属性: qualit
11、y属性控制Flash影片的质量,它由低到高可以接受4个参数中的一个。 StageQuality.LOW(“low”):此时Flash影片以低品质呈现,不消除图形的锯齿,位图也不进行平滑处理; StageQuality.MEDIUM(“medium”):此时Flash影片以中等品质呈现,使用2* 2像素网格消除图形锯齿,但不对位图进行平滑处理。,11.2.2 stage的全局属性,StageQuality.HIGH(“high”):此时Flash影片以高品质呈现,使用4 x 4像素网格消除图形锯齿,如果影片是静态的,则对位图进行平滑处理。Flash Player默认的呈现品质是high。 Sta
12、geQuality.BEST(“best”):此时Flash影片以最佳品质呈现,使用4 x 4像素网格消除图形锯齿,并且始终对位图进行平滑处理。 说明:quality接受的参数存储于常量中,如常量StageQuality.LOW中存放的是字符串“low”。,11.2.2 stage的全局属性,displayState属性: displayState属性用于设置当前的Flash影片的显示状态。它可以接受以下参数之一。 StageDisplayState.FULL_SCREEN(“fullscreen”):设置Flash以全屏模式播放。 StageDisplayState.NORMAL(“norm
13、al”):设置Flash以普通模式播放。 出于安全考虑,Flash Player不允许系统自动切换为全屏模式,要求必须通过用户交换(鼠标点击或按下键盘)才能够实现全屏。,11.2.3 stage特殊事件,stage支持如下3个特殊事件类型。 FullScreenEvent.FULL_SCREEN(“fullScreen”):当Flash程序成功切换为全屏模式后调度。 Event.MOUSE_LEAVE(“mouseLeave”):当鼠标离开离开Flash程序播放窗口时调度。 Event.RESIZE(“resize”):当缩放模式设置为“noScale”时,播放窗口发生变化(被拖动)时调度。,
14、11.3 Sprite类,Sprite类是最基本的显示对象容器之一。它既是显示对象,同时也可以充当显示对象容器。它有z轴顺序,但不包含时间轴。如之前提到过的,一个Flash文件的文档类只能继承自Sprite类或MovieClip类。当一个程序没有时间轴时,即继承Sprite类;有时间轴时则继承MovieClip类。 Sprite类拥有全部显示对象容器的属性和方法,同时它还添加了按钮模式和拖放模式。这两种特殊模式增加了Sprite类的交互性。,11.3.1 按钮模式,当设置Sprite实例的buttonMode属性为true时,即打开了它的按钮模式。此时当鼠标指针经过时会触发手形光标的显示。当S
15、prite实例获得焦点时按下【Enter】或空格键时可以接收鼠标点击(click)事件。,11.3.2 拖放模式,Sprite允许鼠标对其进行拖放。其语法如下。 对象.startDrag(); 终止拖放模式的语法如下。 对象.stopDrag(); 说明:startDrag方法一般情况下不须提供参数,实际上它具有两个有默认值的参数。其中之一名为lockCenter,它指示当前的拖放行为是否始终锁定对象的中央,其默认值为false;另一个参数是一个矩形实例,它代表对象可拖动的范围,其默认值为null。,11.4 MovieClip类,如前所述,MovieClip类有平面坐标,z轴深度,同时也具有
16、时间轴。是一个“四维”的对象。它的前“三维”继承自Sprite,自身的特色在于对时间轴的控制。介绍MovieClip类时,我们将着重介绍这一特性。,11.4.1 时间轴的基本单位,在MovieClip类中,时间轴被分割为帧。帧是时间轴的最小单位,它的序号代表着播放头的播放顺序。在Flash CS3的时间轴面板上,每个小格子代表1帧,如下图所示。 播放头按帧的序号顺序进入各帧,并执行帧上的代码,之后描绘显示对象。,11.4.1 时间轴的基本单位,除了帧这个最小单位外,在Flash程序中还支持自定义的“标签”。标签是几个连续帧的集合,例如可以在第20帧处按下【F5】键插入帧,并选中120帧中的任意
17、帧,在属性面板(Properties)的Frames属性中输入“opening”,此时120帧被自定义为一个叫做“opening”标签。,11.4.2 时间轴的属性和方法,了解了时间轴基本单位后,再来看MovieClip的属性就简单得多了,如下表所示。,11.4.2 时间轴的属性和方法,与上述属性相对应,MovieClip类中的特有方法也几乎全部用来控制播放头的位置,如下表所示。,11.4.3 播放头事件,在介绍MovieClip类之前,我们已经使用过很多次播放头事件enterFrame了。这个事件在播放头进入新帧时调度。如果播放头不移动,或者只有一帧,则会反复以帧频调度。系统会对所有侦听此事
18、件的显示对象同时调度此事件。 通常,播放头只能逐帧前进。但配合播放头事件enterFrame,也可以实现MovieClip的快进,快退等功能。,11.5 Loader类,Loader类是另一种显示对象容器,它可用于加载SWF文件或位图图像(JPG、PNG、GIF)文件。被加载的显示对象将作为 Loader 对象的子级添加。 在ActionScript中,将加载内容明确地分为两类,显示对象全部使用Loader类加载,而文本和二进制数据则使用URLLoader类来加载。本章将专注于介绍显示对象容器,后面章节将会介绍URLLoader 。 说明:显示对象也可以通过一些手段还原为数据,再通过URLLo
19、ader加载到Flash程序中。,11.5 Loader类,由于显示对象容器的嵌套关系,被加载的SWF文件中的一些方法将发生指向性的错误。例如addChild、removeChild等。因此被Loader加载的文件需要有严格的语法格式,如下列代码。 removeChild(mc); /mc的父(容器)删除mc mc.parent.removeChild(mc); 对于一个独立的Flash程序来说,两行代码都是正确的,但如果该代码存在于一个即将被加载的SWF文件中时,则推荐使用第二种方式删除mc实例。 其他有可能引发错误的省略写法还包括直接使用addChildAt、removeChildAt、s
20、etChildIndex等。,11.5.1 加载显示对象,Loader对象加载外部显示对象的方法很简单,但是因为牵涉到网络环境(或本地加载速度),一定要在加载过程中侦听加载状态。Loader还没有完全加载完就急着进行访问。这是初学者经常会犯的低级错误。 一般来说,Loader加载对象时按以下步骤进行。 (1)声明Loader实例。 (2)使用load方法加载。 (3)侦听Loader.contentLoaderInfo的“complete”或“init”事件。 (4)侦听到事件后再处理loader对象(访问属性或方法等)。,11.5.2 访问加载对象,当成功加载对象后,一般不仅仅要求显示加载对象。如果被加载的对象
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版智能安防系统建设合同3篇
- 二零二五版家具回收与环保处理服务合同2篇
- 2024版网络技术服务外包合同
- 二零二五版建筑保温施工与智能家居系统集成合同3篇
- 二零二五年度环保型广告牌销售、安装及广告内容合作合同3篇
- 2024版城市轨道交通设施维修保养合同
- 二零二五年度驾驶员押运员安全责任与聘用合同3篇
- 二零二五版文化创意产业担保合同协议书2篇
- 2024版个人资金借用详细协议协议版
- 二手房定金合同格式范文(2024版)
- 八年级数学家长会课件
- 光伏发电项目试验检测计划
- 苏少版七年级美术下册 全册
- 民航概论5套模拟试卷考试题带答案
- 2024届中国电建地产校园招聘网申平台高频500题难、易错点模拟试题附带答案详解
- COCA20000词汇音标版表格
- 沪教版七年级数学上册专题06图形的运动(原卷版+解析)
- JTG-T-F20-2015公路路面基层施工技术细则
- 光伏发电站集中监控系统通信及数据标准
- 建筑垃圾减排及资源化处置措施
- 2024年辽宁石化职业技术学院单招职业适应性测试题库附答案
评论
0/150
提交评论