Flash5 Action初体验──悠游水泡

Author: 吕睿 Date: 2001年 11期

    Flash5正式版已发布,想必不少人已接触过它。关于它的好处这里就不多说了。下面就随我来用Flash5编写一个水泡的Action程序吧。
      成品效果为在白底的320×240的区域内,只要鼠标一拖动就会拉出一串大小不一的水泡。水泡越浮越大,有些爆开了,有些就消失了。在下面的输入栏中可以调节水泡的数量和上浮速度。
      1.新建一个场景,底色为白色,宽和高分别为320和240,帧数就为默认的12帧。
      2.在工作区中画一个圆(大小不必在意,在Action中可以控制),打开Window/panels/Fill面版,填充刚才画好的圆,色彩只要看上去舒服,过渡自然就可以了。
      3.把圆的边框删除,选取菜单Insert/convert to symbol,在弹出的面板中,将Name设为Gnist1_graph,Behavior设为Movie Clip。完成后将这个组件从场景中删除,以后就能方便地从Liarbry中调用它了。
      4.在场景的左下角用字符工具(Character)在工作区中打上“Number”,换一行再打上“Speed”。
      5.然后在“Number”后面再次用字符工具打上“1”,换回箭头工具,选中字符框“1”,点击鼠标右键,并选择Panels下的Text Options,这时会弹出TextOptions的控制面版。在面板的最上方是一个面板tab,下面一行有个下拉箭头,我们点一下这个箭头并选择Input Text,然后我们在Variable的输入框中输入“m”来把变量名设为m。最后在Max Chars输入框中输入“2”把可输入的字符数限定在两个。接着就用同样的方法在“speed”后建立一个字符框,打上15,变量名为g,如图1(^11040701a^)。
      6.新建一个Movie Clip组件,取名为crack。把先前做好的叫Gnist1_graph的组件从Liarbry中拖入这个新建的组件中,并用Modify/Break Apart命令把它打散。
      7.插入几个关键帧做出一个水泡爆裂的效果,只要像就可以了。别忘了在最后插入一空白关键帧,对它双击调出Action面板,在右边的输入框中写入removeMovieClip(“”),这句话的意思就是让组件把自己删除,也就是水泡爆裂后就自我删除(Flash5的Action面板需要拉宽,否则你是看不见右边的输入框的,点击右上角的箭头可以选择Nomal Mode或Expert Mode,一个是用mouse选择输入action,一个直接输入),如图2(^11040701b^)。
      8.再新建一个Movie Clip组件,取名为Gnist1,把Gnist1_graph的组件拖入这个新建的组件中,鼠标右键单击Gnist1_graph,选择Panels下的Instance。在新弹出的面板中的Name一栏中输入“g”,这样就为组件 Gnist1_graph取了个instance name 叫g。接着双击第一关键帧,写入Action如下:
      gg = /:g;??
      设变量gg为主场景下的变量g的值(就是那个deep的字符框)
      setProperty (“g”, _y,getproperty(“g”,_y)-gg);  ??
      给MC g的Y坐标赋值为当前的Y坐标减去变量gg的值(现在就是减半15)
      setProperty (“g”, _alpha,getproperty(“g”, _alpha)-3);  ??
      设置MC g的透明度为当前的透明度减3
      setProperty (“”, _xscale,(_xscale)+(random(3)));      ??
      设置当前MC(即Gnist1)的x缩放为当前的x缩放随机加上0到3中的一个数
      setProperty (“”, _yscale,(_yscale)+(random(3)));      ??
      照上句
      opx = getproperty(“g”,_x);  ??
      设变量opx为MC g当前的X坐标
      opy = getproperty(“g”,_y);  ??
      照上句
      a = getproperty(“g”,_alpha);  ??
      照上句
      if (bo == random(8) and a<50 and (opxs+opys)>80) {如果变量bo等于0到8的九个数中随机产生的一个(如果bo为1的话就有1/9的机会条件成立),而且透明度小于50,x和y的缩放大于80就执行
      gotoAndPlay (4)
      跳至并播放第4帧
      }
      写完后在第二帧处插入关键帧,双击写入action如下:
      bo =“1”;
      设变量bo为1
      opxs = _xscale;??
      设变量opx为当前MC的x的缩放大小
      opys = _yscale;??
      照上句
      if (a<=0) {  ??
      如果透明度小于0的条件成立,那么执行
      gotoAndStop (3);  ??
      跳至并停于第3帧
      } else {??
      如条件不成立
      gotoAndPlay (1);  ??
      跳至并播放第1帧
      }
      9.写完后在第三帧处插入空白关键帧并写入:removeMovieClip(“”);。之后我们就要把水泡爆裂的动画加入。在第四帧处插入关键帧,把叫crack的MC在此关键帧中拖入当前MC中,取instance name为w,双击关键帧写入Action如下:
      setProperty (“w”, _x, opx);  ??
      setProperty (“w”, _y, opy);  ??
      setProperty (“w”, _xscale, opxs);  ??
      setProperty (“w”, _yscale, opys);  ??
      setProperty (“w”, _alpha, a);  ??
      (大家可以参照前面的解释理解)
      10.完成后在第四关键帧后第n-1个帧处插入一空白关键帧(n是叫crack的组件帧数,如果组件 crack有5帧,那就该在第8帧处插入空白关键帧,如^11040701c^3)。双击写入:
      removeMovieClip (“”);
      11.至此叫Gnist1的组件中的内容全部完成了,我们已有了个会越向上浮就越大,越透明,偶尔会爆裂的水泡。下面要做的就是让mouse能拖出一串水泡。
      12.新建一个组件,取名dg。在其中用字符工具输入bubble,颜色大小可根据自己的喜好而定,后面我们将用它来替换鼠标的样子。回到主场景中,新建一层,把叫dg的MC和名为Gnist1的MC都在新建层上拖入场景,分别取instance name为dg和gnist1。双击新建层的第一关键帧,写入action如下:
      startDrag (“dg”,true,0,240,320,0);  ??
      开始拖动MC dg,锁在mouse中央,只能在x:0到320,y:0到240里拖动
      setProperty(“gnist1”,_visible,False);  ??
      设置MC gnist1的可见性为不可见
      gx = getproperty(“dg”,_x);  ??
      gy = getproperty(“dg”,_y);  ??
      以上两句参照前面的解释
      if (gx<>gx1 or gy<>gy1){   ??
      判断mouse是否有移动,有就执行
      l = m;
      设变量l为m(就是number的字符框,现在是1)
      while (l>=0){   ??
      当l>=0成立时循环执行
      l = l-1;
      Scale = random(25)+5;
      setProperty (“/gnist1”, _x, getproperty(“dg”, _x)+random(3) -random(3);  ??
      setProperty (“/gnist1”, _y, getproperty(“dg”, _y)+random(3) -random(3);??
      setProperty (“gnist1”, _visible, True);  ??
      setProperty (“/gnist1”, _rotation, random(20)+1);  ??
      setProperty (“/gnist1”, _xscale, Scale);  ??
      setProperty (“/gnist1”, _yscale, Scale);  ??
      n = n+1;
      以上参照先前的解释
      bn = “gnist1”&n;(或写为“gnist1”addn或“gnist1”+n)
      变量bn为gnist11,gnist12……gnist1n
      duplicateMovieClip (“gnist1”, bn, n);  ??
      复制MC gnist1直到第n个
      }
      结束循环
      }??
      13.写完后在新建层的第二帧处插入关键帧,双击写入action如下:
      gx1 = getproperty(“dg”,_x);  ??
      gy1 = getproperty(“dg”,_y);  ??
      这是为了判断mouse而设的变量
      14.写完后回到旧的那层,双击那层的第一关键帧,写入:Mouse.hide();。这句话的作用就是隐藏鼠标。完成后按F5键增加一帧新帧,以求两层帧数相同。
      好了,大功告成。测试一下影片吧, 是不是很有意境啊!有何问题可以来信qsa@citiz.net。