资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
8.3 颜色和透明度动画中不仅包含着对象位置和大小的变化,还会包含对象颜色和透明度的变化。两者有机结合,方才构成了绚丽多彩的动画效果。本节将介绍如何控制动画对象的颜色和透明度。8.3.1 操作透明度在Flash中,直接修改显示对象的透明度较为简 单。所有的DisplayObject及其子类都有alpha属性,只需要指定相应的值,就能完成对透明度的更改。值得注意的是,AS3中规定Alpha 的值是从0到1的小数,或者说是0到100%的百分数。但是对于使用设备字体的textField对象,alpha属性不能正常起作用。8.3.2 ColorTransform类改变显示对象的颜色,相对要困难一些,AS3提供了 强大的颜色变换类ColorTransform。同上一节谈到的控制形状位置的Matrix类相似,ColorTransform类在 displayObject.transform属性中也有一个对象实例。不过其名字为 displayObject.transform.colorTranform。注意对象名称大小写的变化,AS3大小写敏感。使用displayObject.transform.colorTranform的步骤同displayObject.transform.matrix对象相似:(1)首先创建一个ColorTransform对象myColorTransform。(2)然后将目标显示对象的transform.colorTransform对象复制到myColorTransform之中。(3)使用myColorTransform类的各种属性或方法进行操作。(4)用myColorTransform替换显示对象内部的transform.colorTranform,FlashPlayer会自动使用colorTranform的数据对显示对象进行相应变换。ColorTransform类的构造函数如下:ColorTransform(redmulti,greenmulti,bluemulti,alphamulti,redoffset,greenoffset,blueoffset,alphaoffset);构造函数 “ColorTransform()”中的所有参数都是Number类型,但实际上redmulti、greenmulti、bluemulti和 alphamulti是0到1的小数。Redoffset、greenoffset、blueoffset、alphaoffset是从-255到255 的整数。注意这里alphaoffset的取值范围是0到255,而AS3中DisplayObject.alpha属性的取值是0到1,两者不要混淆。当将ColorTransform对象附加至显示对象时,RGB和Alpha四个通道都会分别进行计算和变换。最终颜色的计算方法为:红色通道最终值=红色通道原有值*redmulti+redoffset。绿色通道最终值=绿色通道原有值*greenmulti+greeboffset。蓝色通道最终值=蓝色通道原有值*bluemulti+blueoffset。透明通道最终值=透明通道原有值*alphamulti+alphaoffset。经过运算后,通道最终值只能在0到255之间。超过255的数值,自动转换为255,负数自动转化为0。8.3.3 实例应用下面通过实例8-3学习ColorTransform对象。(1)新建项目。如图8-9在舞台上建立名为color_rect1,color_rect2,color_rect3的三个矩形MovieClip对象,填充颜色为R255,G48,B0,alpha100。如图8-9所示水平排列:(2)选中时间轴,在代码编辑器中输入以下代码:/操作color_rect1color_rect1.alpha=.5;/操作color_rect2var color_trans:ColorTransform=new ColorTransform();color_trans.redMultiplier=0;color_trans.greenMultiplier=0;color_trans.blueMultiplier=0;color_trans.alphaMultiplier=0;color_trans.redOffset=0;color_trans.greenOffset=0;color_trans.blueOffset=255;color_trans.alphaOffset=255;color_rect2.transform.colorTransform=color_trans;/操作color_rect3color_rect3.transform.colorTransform=new ColorTransform(1,1,1,1,0,0,0,0);/前四个参数为multi,后四个参数为offset,顺序RGBA(3)运行后,舞台显示输出如图8-10所示。 图8-9 建立三个彩色MovieClip 图8-10 对象获得新的颜色8.3.4 代码分析在这段代码中,对三个矩形对象尝试采用不同的处理方法。(1)对于color_rect1,使用直接设置alpha值的办法,使其半透明。(2)对于color_rect2,采用强大的 colorTransform对象,按照标准步骤对其进行操作。因为不能直接操作其内部colorTransform对象,代码先创建了一个自定义 colorTransform对象color_trans,依次设置color_trans的各属性,并替换color_rect2的内部 ColorTransform对象,改变color_rect2的颜色。(3)对于color_rect3,直接使用 colorTransform构造函数创建了一个无名colorTransform对象,并替换color_rect3的内部 colorTransform对象。这种写法的优点在于代码简单直观,但是因为无名对象的属性和方法不能随意访问,在较复杂的场合,会增加代码的维护成 本。如果需要使用这种写法,应尽量为语句撰写清楚的注释。从细节做起,逐步养成良好的代码写作风格。8.3.5 调色技巧灵活使用ColorTransform类可以调出计 算机显示系统中的任何一种颜色。通过把redmulti、greenmulti、bluemulti、和alphamulti设为0,就可以完全清除显示 对象的原有颜色。然后设置redoffset、greenoffset、blueoffset和alphaoffset,相当于为显示对象创建了一个新颜 色。而精细的修正redmulti、greenmulti、bluemulti和alphamulti的数值,将微量调整显示对象的原有颜色,可以在动画 中达到颜色的自然过渡。灵活使用ColorTransform类还能营造出特殊的效果。要清空一个通道,只需要把相应的multi参数和offset设为零即可。对于多种色彩构成的显示对象,可以通过ColorTransform类的变换,取出某一个通道,清空某一个通道。达到特殊的视觉效果。需要特别指出的是,前例中的 colorTransform色彩调整只是应用到显示对象的运行时内存副本中,并没有改变库中元件的固有颜色。当再一次使用ColorTransform 类调整显示对象时,并不是对前一次调整后的内存副本的颜色做操作,而是重新对库中color_rect元件的固有颜色作调整,然后把调整后的结果复制到显 示内存中。这种机制是必要的,可以有效避免颜色管理的混乱。当使用ColorTransform类变换对象颜色之后,如果需要恢复对象原有的颜色,只要为对象的transform.colorTransform属性赋一个null值。这时AS3的执行引擎会重新复制对象的原始数据到显示内存中。ColorTransform类不能调整影片的背景色,如需要此类设置请参考第6章Stage类的相关内容。8.3.6 闪动动画掌握了AS3定时器和对显示对象基本属性的控制之后,就完成了动画脚本控制的知识储备。综合运用这些知识,能控制对象的轨迹,便创建简单的动画。令一个显示对象动起来,最简单的效果是闪动。闪动动画的原理相对简单:舞台上的显示对象间隔一定时间在隐藏和显示状态切换。代码编写时,需要重点考虑的是:选择何种隐藏显示动画对象的方法。控制对象显示隐藏的方法如表8-2所示。表8-2 控制显示对象显示隐藏的常见方法名 称详 情显示列表法通过添加和删除方法维护显示列表只有添加在显示列表中的显示对象才会显示对象从列表中移除后,将不可见visible属性法将显示对象的visible属性设置为true或者false达到显示或者隐藏对象的目的alpha属性法显示:设置显示对象alpha值为1隐藏:设置显示对象alpha值为0移出舞台法获得Stage的大小,将显示对象的位置移到舞台之外对象遮挡法利用对象的高低层关系,令上层对象遮蔽下层对象,达到下层对象隐藏的目的下面对各种方法的优缺点和适用场合做详细说明。1显示列表法显示列表是AS3中引入的新概念。任何显示对象,必 须使用“addChild()”方法添加到显示列表中,方才可以在舞台上显示。相反,如果使用“removeChild()”方法或者 “removeChildAt()”方法将显示对象从显示列表中删除,则能够达到隐藏显示对象的目的。使用这种方法不应该仅是因为它相当“时髦”,更重要 的着眼点是:它将移除该显示对象的所有子树。所以在某些场合,显示对象法在代码编写的角度上看,是相当便捷高效的。只需要很短的代码,就可以控制众多的对 象。但是在运行的开销上,该方法要重建显示列表,对显示内存进行多次读出和写入,开销相对较大。2visible属性法该方法通过设置显示对象的visible属性为 false,通知Flash的显示引擎在渲染时忽略该项目的渲染,达到隐藏显示对象的目的。显示对象在隐藏期间,在舞台上也是确切存在的,依然保有其位 置,颜色,透明度等属性。由于不需要修改显示列表,该方法的运行开销是最小的。3alpha属性法该方法的特点是较为灵活。它不仅可以实现显示对象的显示和隐藏,还可以令对象产生半透明状态。当一个物体逐渐消失和逐渐显示的时候,必须使用alpha属性控制。在诸多特效变幻中,淡入淡出效果是最常见的。至于alpha变化的运行时开销,则完全不要太过担 心,因为它是硬件加速的。因为现代处理器,包括所有Intel奔腾II以上级别、AMDK6_II以上级别,以及xScale系列掌上设备处理器,对操作 透明度变化的运算都进行了指令集优化,所以在目前大多数的平台上,即使没有图形加速卡,这种alpha效果的运行开销也比较小。许多显示对象一起使用透明 度变化也不会构成显示瓶颈。4移出舞台法该方法可以实现显示和隐藏对象的目的,但是其运行效率相当低,在早先的Flash版本中,移出舞台的动画对象依然全额耗费运行资源。在AS3的引擎中,对这种情况有所改善,但并不理想。除了在动画中切实需要,否则绝不要使用这种方案。而且即使出于动画需要,必须使用该方法。在对象移动到场景外之后,也最好立刻使用visible方法将其隐藏,以节省开销。在复杂动画项目中,这种开销的节约是很重要的。5对象遮挡法在早期的版本中,显示元件有一个层的概念:上层对象 遮盖下层对象。层机制在AS3中已经被显示列表索引机制淘汰。显示列表中,索引序号靠前的对象会首先绘制,将被索引序号靠后的
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号