当前位置:首页 > 金融/证券 > 股票报告 > ActionScript3.0从入门到精通第11章显示对象容器(教学)
第11章显示对象容器前两章介绍到的对象都是二维概念的显示对象。ActionScript中有一类对象在二维空间的基础上增加了z轴顺序,虽然达不到z轴坐标的精确程度,也无法表现3D空间效果,但是z轴顺序的引入无疑也提高了显示对象的表现力,这类对象被称之为“显示对象容器”。通常z轴顺序也被称之为深度。在z轴顺序之外,如果再加上时间这一个维度,显示对象就成为了一个四维对象,就可以表现对象的运动变化。ActionScript通过“时间轴”来描述时间维度。同时具有深度和时间轴的是MovieClip类,它也是使用最为广泛的显示对象。11.1显示对象容器概述显示对象容器在ActionScript中是一个抽象类,称为DisplayObjectContainer。它不能被直接实例化,但却描述了子类的共同性质:深度。DisplayObjectContainer的子类包括Loader、Sprite和Stage。显示对象容器的命名非常形象,它就象一个真正的容器。其它显示对象可以加载到容器中去,对容器进行操作,也同时会影响到容器内的对象。例如,对容器进行变形或缩放时,它包含的对象也会一起变形或缩放。如果从显示列表中删除容器,则它所包含的所有对象也会被删除。显示对象容器内的显示对象通过深度组织,每个对象获得一个索引值。这个值越小则显示对象越靠下,越大则越靠上。视觉上,上面的对象会遮盖住下面的对象。11.1.1添加子对象显示对象容器的概念始终围绕着它所包含的子对象(child)。可以使用addChild方法将子对象加载到容器中,其语法如下。容器.addChild(子对象);例如,以下代码将一个名为child的Shape实例加载到名为container的Sprite实例中。varcontainer:Sprite=newSprite();varchild:Shape=newShape();container.addChild(child);11.1.1添加子对象注意:当容器container加载了子对象child后,容器和子对象都还处于无法显示的状态。需要把它们再“装入”舞台这个最大的容器中。即使用如下语句令舞台加载container。stage.addChild(container);在这一过程中,stage是容器,而container成了子对象。当舞台加载了子对象后默认显示该对象,这就是我们学说的“加载到显示列表”。而一般主时间线为文档类的实例,因此在FlashCS3的主时间线上,加载到显示列表的代码也常可以省略地写为以下两种形式。this.addChild(container);addChild(container);11.1.2子对象的深度子对象的z轴顺序表现为深度,深度可以认为显示对象容器中各个对象的层叠顺序。当一个子对象使用addChild方法加载到容器中时,ActionScript自动为其分配一个索引,最先加载子对象的索引为0,以后顺次增加。索引较小的对象会显示在索引较大对象的下方。例如,以下代码中container先加载child1,再加载child2。因此,child1会显示在child2的下方。container.addChild(child1);container.addChild(child2);11.1.3numChildren属性一个显示对象容器中有几个子对象,就有几个完全不同、由0开始递增的索引。可以使用容器的childNum属性取得子对象的个数,如下列代码。11.1.3numChildren属性当已知numChildren时,子对象的索引顺序就是由0变化到(numChildren-1)。一般ActionScript会用numChildren作为遍历容器时的参数使用,如下列代码。如果numChildren值为0,则表示当前的容器中不含子对象11.1.4对深度索引的控制ActionScript在加载时,除了默认的加载顺序外,也可以使用addChildAt方法指定子对象的深度索引,其语法如下。容器.addChildAt(子对象,索引);addChildAt可以自由指定加载子对象的索引值,可以指定新加载的子对象位于任意其他子对象之间。11.1.5删除子对象从一个显示对象容器中删除子对象时使用removeChild或removeChildAt方法,其语法如下。容器.removeChild(子对象);容器.removeChildAt(索引);removeChild直接删除参数指定的子对象,removeChildAt则会删除处于索引值深度的子对象。明确知道子对象时可以直接使用removeChild方法,有些情况无法了解具体加载到容器中的子对象,则可以通过索引值将其删除。例如,经常使用以下的循环结构删除容器中的所有子对象。//只要当前容器的子对象数不为0,即删除索引0处的子对象while(container.numChildren0){container.removeChildAt(0);}11.1.6getObjectsUnderPoint方法getObjectsUnderPoint是显示对象容器用于检测“碰撞”的方法。它可以返回某一点上容器所有子对象(包括孙,曾孙)的数组结构。其语法如下。容器.getObjectsUnderPoint(点);说明:这里的“点”指的是一个Point实例。一般来说,鼠标侦听器的节点对象是处于最上层的显示对象。例如当一个按钮被另一个按钮遮住时,将无法作为节点对象接收事件。此时可以使用getObjectsUnderPoint方法,它将返回一个数组,包含所有位于指定点的对象。11.2Stage类Stage类是一个非常有代表性,也是一个特殊的显示对象容器。所有呈现在用户面前的显示对象都需要加载到舞台之后才得以显示。同时Stage类也有其特殊性。11.2.1独一无二的stageStage不同于一般的显示对象或容器,它不能实例化,不可以使用newStage这样的构造函数。这是因为Flash在初始化时已经建立了一个独一无二的Stage实例stage(注意大小写)。一个Flash影片同时只能有一个舞台实例。stage由于其存在的特殊性,所以一些属性设置虽然能够应用于普通的显示对象容器中,但是却不允许应用于stage。11.2.2stage的全局属性stage(Stage的唯一实例)具有多个属性。通过设置这些属性,可以影响整个Flash影片。以下我们介绍常用的几个全局属性。frameRate属性:frameRate属性可以获取或设置舞台的帧频,它能够接受的有效数字从0.01到1000。新建Flash文件的帧频为12fps,如果要求较好的动画效果,一般会设置为24,30甚至60不等。由于内部刷新机制的影响,帧频一般来说并不稳定。有时应该描绘的显示对象较为复杂,会拖慢显示。因此,一般不使用frameRate作为计时器,也很难根据当前播放的时间来获取实际播放的帧数。11.2.2stage的全局属性quality属性:quality属性控制Flash影片的质量,它由低到高可以接受4个参数中的一个。StageQuality.LOW(“low”):此时Flash影片以低品质呈现,不消除图形的锯齿,位图也不进行平滑处理;StageQuality.MEDIUM(“medium”):此时Flash影片以中等品质呈现,使用2*2像素网格消除图形锯齿,但不对位图进行平滑处理。11.2.2stage的全局属性StageQuality.HIGH(“high”):此时Flash影片以高品质呈现,使用4x4像素网格消除图形锯齿,如果影片是静态的,则对位图进行平滑处理。FlashPlayer默认的呈现品质是high。StageQuality.BEST(“best”):此时Flash影片以最佳品质呈现,使用4x4像素网格消除图形锯齿,并且始终对位图进行平滑处理。说明:quality接受的参数存储于常量中,如常量StageQuality.LOW中存放的是字符串“low”。11.2.2stage的全局属性displayState属性:displayState属性用于设置当前的Flash影片的显示状态。它可以接受以下参数之一。StageDisplayState.FULL_SCREEN(“fullscreen”):设置Flash以全屏模式播放。StageDisplayState.NORMAL(“normal”):设置Flash以普通模式播放。出于安全考虑,FlashPlayer不允许系统自动切换为全屏模式,要求必须通过用户交换(鼠标点击或按下键盘)才能够实现全屏。11.2.3stage特殊事件stage支持如下3个特殊事件类型。FullScreenEvent.FULL_SCREEN(“fullScreen”):当Flash程序成功切换为全屏模式后调度。Event.MOUSE_LEAVE(“mouseLeave”):当鼠标离开离开Flash程序播放窗口时调度。Event.RESIZE(“resize”):当缩放模式设置为“noScale”时,播放窗口发生变化(被拖动)时调度。11.3Sprite类Sprite类是最基本的显示对象容器之一。它既是显示对象,同时也可以充当显示对象容器。它有z轴顺序,但不包含时间轴。如之前提到过的,一个Flash文件的文档类只能继承自Sprite类或MovieClip类。当一个程序没有时间轴时,即继承Sprite类;有时间轴时则继承MovieClip类。Sprite类拥有全部显示对象容器的属性和方法,同时它还添加了按钮模式和拖放模式。这两种特殊模式增加了Sprite类的交互性。11.3.1按钮模式当设置Sprite实例的buttonMode属性为true时,即打开了它的按钮模式。此时当鼠标指针经过时会触发手形光标的显示。当Sprite实例获得焦点时按下【Enter】或空格键时可以接收鼠标点击(click)事件。11.3.2拖放模式Sprite允许鼠标对其进行拖放。其语法如下。对象.startDrag();终止拖放模式的语法如下。对象.stopDrag();说明:startDrag方法一般情况下不须提供参数,实际上它具有两个有默认值的参数。其中之一名为lockCenter,它指示当前的拖放行为是否始终锁定对象的中央,其默认值为false;另一个参数是一个矩形实例,它代表对象可拖动的范围,其默认值为null。11.4MovieClip类如前所述,MovieClip类有平面坐标,z轴深度,同时也具有时间轴。是一个“四维”的对象。它的前“三维”继承自Sprite,自身的特色在于对时间轴的控制。介绍MovieClip类时,我们将着重介绍这一特性。11.4.1时间轴的基本单位在MovieClip类中,时间轴被分割为帧。帧是时间轴的最小单位,它的序号代表着播放头的播放顺序。在FlashCS3的时间轴面板上,每个小格子代表1帧,如下图所示。播放头按帧的序号顺序进入各帧,并执行帧上的代码,之后描绘显示对象。11.4.1时间轴的基本单位除了帧这个最小单位外,在Flash程序中还支持自定义的“标签”。标签是几个连续帧的集合,例如可以在第20帧处按下【F5】键插入帧,并选中1~20帧中的任意帧,在属性面板(Properties)的Frames属性中输入“opening”,此时1~20帧被自定义为一个叫做“opening”标签。11.4.2时间轴的属性和方法了解了时间轴基本单位后,再来看MovieClip的属性就简单得多了,如下表所示。11.4.2时间轴的属性和方法与上述属性相对应,MovieClip类中的特有方法也几乎全部用来控制播放头的位置,如下表所示。11.4.3播放头事件在介绍MovieClip类之前,我们已经使用过很多次播放头事件enterFrame了。这个事件在播放头进入新帧时调度。如果播放头不移动,或者只有一帧,则会反复以帧频调度。系统会对所有侦听此事件的显示对象同时调度此事件。通常,播放头只能逐帧前进。但配合播放头事件enterFram
本文标题:ActionScript3.0从入门到精通第11章显示对象容器(教学)
链接地址:https://www.777doc.com/doc-2900470 .html