今天教大家利用FlashCS4制作质感的水晶泡泡动画,并通过编写get和set存取器函数,为创建的元件类提供易于使用的编程接口,使得元件类的属性在可以被访问的基础上进行良好的隐藏和封装。本例还配合使用三角函数知识创建丰富特效,通过本例的制作,读者可以掌握如何为元件类提供易于使用的编程接口,以及加深对三角函数知识的理解应用。 本例思路: lt;1gt;创建实例背景。 lt;2gt;绘制类似水泡的图形,并转换为元件类。 lt;3gt;编写元件类扩展类。 lt;4gt;创建文档类。 实例步骤: (1)新建一个空白文档,舞台大小设置为400300,帧频设置为30,将舞台背景颜色设置为618D0E,绘制一个直径为舞台高度大小的正圆,并填充放射状渐变色,调整高光位置在下方,如下图101所示。 其填充放射状渐变色值为:A7E60007891400552F。调整色柄值,参数依次为: 色柄一:红:167,绿:230,蓝:0Alpha:100 色柄二:红:7,绿:137,蓝:20Alpha:100 色柄三:红:0,绿:85,蓝:47Alpha:100 图101绘制背景 (2)创建一个新图层,命名为ldquo;高光rdquo;。绘制一个半径与步骤(1)中的圆形略小的同心圆形,并填充线性渐变色,使用ldquo;渐变变形工具rdquo;进行调整高光位置由上至下分布,如图102所示。 其填充线性渐变色值为:FFFFFFFFFFFF。调整色柄值,参数依次为: 色柄一:红:255,绿:255,蓝:255Alpha:0 色柄二:红:255,绿:255,蓝:255Alpha:100 图102高光部分 (3)再创建一个新图层,命名为ldquo;顶部高光rdquo;。使用ldquo;椭圆工具rdquo;在顶部绘制一个椭圆,填充线性渐变色,高光位置同上一样分布,如图103所示。 其填充线性渐变色值为:FFFFFFFFFFFF。调整色柄值,参数依次为: 色柄一:红:255,绿:255,蓝:255Alpha:0 色柄二:红:255,绿:255,蓝:255Alpha:68 图103顶部高光 (4)新建一个影片剪辑,命名为ldquo;Ballmcrdquo;。绘制类似小水泡的图形,这里我们绘制一个放射状渐变的圆形,大小约在20左右,如图104所示。 其填充放射状渐变色值为:FFFFFFFFFFFFFFFFFF。调整色柄值,参数依次为: 色柄一:红:255,绿:255,蓝:255Alpha:36 色柄二:红:255,绿:255,蓝:255Alpha:9 色柄二:红:255,绿:255,蓝:255Alpha:0 图104绘制类似水泡图形 (5)为影片剪辑ldquo;Ballmcrdquo;添加元件类,如图105所示。 图105添加元件类 (6)下面是元件类扩展类。该类有三个私有属性,如第11到13行代码所示,我们在第22、第25行代码分别定义其属性对应的get()方法,为该元件类实例提供可访问对应属性的接口,第三个属性还提供set()方法,如第29行代码所示。在该类构造函数中还初始化了三个属性,分别产生随机的newX、newY值,如第17到19行代码所示。 AS3代码: 复制代码 代码如下: 该类为扩展元件类 authorlbynet version0。1 package{ importflash。display。Sprite; publicclassBallmcextendsSprite{ privatevarnewX:Number; privatevarnewY:Number; privatevarW:Number; publicfunctionBallmc(){ this。newX1Math。random()100;x轴上的随机速度 this。newY1Math。random()20;y轴上的随机速度 this。W0;用于改变x轴上的随机速度值 } publicfunctiongetnewX():Number{ returnthis。newX; } publicfunctiongetnewY():Number{ returnthis。newY; } publicfunctionsetW(i:Number){ this。Wi; } publicfunctiongetW():Number{ returnthis。W; } } } (7)下面的Main类是本实例的文档类,该类定义了三个属性,分别是存储水泡总数、数量累加变量和随机宽、高比例值,第12到14行代码所示。在构造函数中调用init()方法进行初始化两个属性值,并注册ENTERFRAME事件侦听器,如第20到22行代码所示。 复制代码 代码如下: 该类为主程序类 authorlbynet version0。1 package{ importflash。display。Sprite; importflash。events。Event; publicclassMainextendsSprite{ privatevartotalNum:uint; privatevari:uint; privatevardim:Number; publicfunctionMain(){ init(); } privatefunctioninit(){ this。totalNum70; this。i0; stage。addEventListener(Event。ENTERFRAME,enterFrameHandler); } (8)下面是两个侦听器函数,enterFrameHandler是前面注册的侦听器对应的函数,该函数创建了totalNum1个Ballmc实例,并实例的y坐标值统一设置在舞台高度之外,如第29到31行代码所示。接着我们在第33行代码中随机生成一个0到1之间的随机小数,并与生成的Ballmc实例对应的宽、高进行相乘得到随机的宽、高值,如第33到35行代码所示。If()语句的最后将Ballmc实例添加到显示列表并注册ENTERFRAME事件侦听器,和进行i值的累加,如第37到39行代码所示。 AS3代码 复制代码 代码如下: privatefunctionenterFrameHandler(event:Event){ varmc:Sprite; if(this。ilt;totalNum){ mcnewBallmc(); mc。ystage。stageHeight; this。dimMath。random(); mc。widthdim; mc。heightdim; addChild(mc); mc。addEventListener(Event。ENTERFRAME,removeEnterFrameHandler); this。i; } } privatefunctionremoveEnterFrameHandler(event:Event){ varmc:event。targetasSprite; mc。W。1; mc。xMath。sin(mc。W)mc。newXstage。stageWidth2; mc。ymc。newY; if(mc。ylt;0){ mc。removeEventListener(Event。ENTERFRAME,removeEnterFrameHandler); removeChild(mc); this。i;使得i的值小于totalNum,从而重新创建watermc (9)removeEnterFrameHandler是生成的每个Ballmc实例对应的侦听器函数,在该函数中,我们对Ballmc实例的W属性进行累加,并设置其X、Y坐标值,如上图中第45到48行代码所示,其中X坐标值被设置为舞台中间大小对应Ballmc实例的newX属性值其W属性的正弦值,如上图中第47行代码所示,从而使对应Ballmc实例在舞台中间的左右来回作运动,而在Y轴方向上赋予其newY值,使其产生Y轴方向上的递减(也就是Ballmc实例向上运动),如上图中第48行代码所示,最终产生盘旋上升效果,如本例效果图所示。下图所示是本例所使用的三角函数简单原理图。 图106三角函数原理 (10)当Ballmc实例运动致舞台上方外,便清除该实例注册的ENTERFRAME事件侦听器和该该实例,并进行i值的递减,如步骤(7)第50到55行代码所示。我们还可以扩展思路,创作更多效果,如下图所示的小球从向而上运动,作类似喷泉效果。还可以做各种类似冒泡效果 图107扩展实例 教程已完毕,希望对大家都有一定的帮助。