当前位置:软件学习 > Flash >>

Flash小球绕杆视觉欺骗

  实现原理:制作一个小球环绕的mc,利用视觉欺骗使人们产生小球在环绕中轴旋转运动的motion动画。利用as复制功能每隔一定时间间隔复制一个环绕运动的小球mc,实现了一个接一个永不间断的环绕小球效果。

  本例重点:

  视觉欺骗:本例中的小球绕杆是一个典型的视觉欺骗,也是在flash制作中经常使用的手法,值得注意的是在小球动画的中心加上一个横杆来进行视觉的欺骗。利用人视觉的局限来实现了假3D效果。

  对变量的赋值:赋值是最最基础的as语句,我们可以利用"="来将一个数值赋值给一个变量,并且对这个变量进行算术运算。通常我们会在flash影片的第一帧进行变量的赋值,这样就不会影响到后面播放的影片。



  条件判断语句:在flash的实际应用过程中,我们经常会对出现的问题进行判断,例如在游戏中你是否被敌人击中,变量是否超出指定的大小等等,而这一切都需要if语句进行判断。而与else if一起使用可以实现多种条件的判断。

  复制语句:复制语句很好理解,就是利用程序把相同的物体复制成n份,每一份与被复制的物体具有相同的属性与内容。但是要注意的是它们处于的位置是不一样的,每一个mc处在一个不同的_level中。因此位于上层的mc可能会遮盖住下层的mc 。

  制作过程:

  新建一个影片,设置宽为350像素,高300像素,背景色为黑色。

  Insert>symbol新建元件命名为"球",在工具栏中选择oval tool,设置stroke color为无,fill color为任意色画一个正圆,将其设置为居中对齐。

  用arrow tool选择这个圆,windows>panels>fill在弹出的fill面板上的下拉菜单中选择radial gradient(辐射渐变),可以看到一个控制条与两个色彩控制块,点击左边的色彩控制块在色彩选择区中设置填充色为白色,将右边的色彩控制块设置为橙色。选择fill tool对圆形进行填充。利用transform fill你可以调整渐变填充的范围与中心点,使填充效果尽可能像一个立体的球。


  新建元件命名为"线",使用stroke tool,stroke color为橙色绘制一条直线,windows>panles>stroke,在弹出stroke面板设置线的宽度为2,将直线居中对齐。

点击看大图  新建元件命名为"球动画"。从library中拖拽"球"元件到舞台,add guide layer建立一个引导层,在工具栏中选择pen tool,设置stroke color为白色。绘制一个衰减的波形图。此波形以一个波峰开始经历4个波峰4个波谷后衰减为一条近似的直线。选择layer 1,拖拽"球"元件使之中心点与波型图的起点重合。(当中心点显示为一个小圆圈时,松开鼠标即可)在第32、42、47、52、57、62、70帧建立关键帧。依次调整各个关键帧上元件的大小与位置,使之以大、小、大….的顺序排列,并且逐渐缩小。(点击小图看大图)

  调整各个元件的透明度,使第32帧的"球"元件的透明度为80%,以后每个元件递减12%。最后在各个关键帧间建立motion动画。

  回到scene 1,双击第1帧,在弹出的frame actions面板上输入如下as:
i = 0;
j = 20;

  说明:
  将数值0赋与i,将数值20赋与j

  在第2帧建立关键帧,从library中拖拽元件"球动画"两次到这一帧,选择一个"球动画"元件,windows>panels>instance,在弹出的instanc面板中将这个元件的name属性设置为"ball",将其移动到左下角。同样将另一个"球动画"元件的name属性设置为:"ballx",位置设定在右上角,双击第1帧,在弹出的frame actions面板上输入如下as:(相关as命令详解见文章末尾)

if (i<20) {
duplicateMovieClip ("/ball", "ball add i", i);
}

//此段语句的意思是当i<20时将name属性为ball的元件复制为ball1、ball2….

if (j<20) {
duplicateMovieClip ("/ballx", "ballx add j",ji);
}

//此段语句的意思是当j<20时将name属性为ballx的元件复制为ballx1、ballx2….

  在第6帧建立关键帧,输入如下as :
i = i+1;
j = j+1;
if (i<20) {
gotoAndPlay (2);
} else {
stop ();
}


  这段as的含义是:设置i的数值为原来i值加一,j的数值为原来j值加一,当i<20时跳转到第2帧进行播放,当i>20时,将影片停止在此帧播放。大家可以看出在第2帧与第6帧之间其实是一个循环,每播放5帧后就重复一次复制"球动画"元件的操作,直到i>20为止。之所以要在第6帧设置循环,是因为我们不希望所有的"球动画"元件在同一时刻开始播放,而要实现前后的次序就必须设定一定的时间间隔来控制mc的播放。

  新建一层layer 2,将元件"线"拖拽两次到舞台上,并且将它们分别摆放在两个"球动画"元件的中心轴上。Ctrl+enter根据影片播放的情况调整一下元件的大小与相对的位置,我们就完成了实例的制作。.fla 源文件下载学习



  本例中使用的as命令详解:

  if条件选择语句,检验条件并决定下一个将要执行的操作。如果条件为真,则执行if{}中的语句,否则不执行。
  语法:
if(condition){
statement;
};
  参数:
condition:条件表达式,值为真或假。
statement:当执行if语句或检验条件为真的内嵌语句。

  duplicatemovieclip,当动画正在播放时复制一个movie clip。复制出的moveclip与被复制的movieclip完全一样,并从第一帧开始播放。
  语法:
duplicatemovieclip(target,newname,depth)
  参数
target:要复制的movieclip的路径与名称
newname:复制出的movieclip唯一的名称
depth:景深

  本文发表于电脑商情报,经作者同意转载于此。
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,