快速业务通道

Flash MX实例制作:会变身的蛇

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-14

实例效果   白色的背景上,一条金光闪闪的蛇在不停地游动,效果逼真。而且,我们可以动态控制蛇的节数的变化。

  制作中,大家要注意对编程技巧的研究。   本例效果如下:









  设计步骤   打开Flash MX。把场景设置成550 px×450 px,背景为白色,60 fps。   一、设计元件   1.? 制作金蛇   按快捷键Ctrl+F8新建一个名为“snake”的影片剪辑(mc)。然后在影片剪辑符号“snake”第1帧的场景里制作一个蛇头,如图1,蛇头的长为18 px;高为12 px。   注意:一定要如图1所示把场景的中心点放在蛇头的中心,防止蛇头和蛇身脱节。 ?  
图1? 蛇头的位置       图2 制作蛇节   选中场景中的第2帧,按快捷键F7键新建一个空白关键帧,并如图片2所示制作一个蛇节。蛇节的长为6.5 px;高为6.5 px。然后分别在第35,70,100帧插入关键帧(按F6),并把相应帧里的蛇节大小改为(6 px,4 px)、(6 px,1.5 px)、(6 px,1 px)。分别选中第2,35,70帧,然后选择Tween下拉列表里的Shape命令。   2.? 制作按钮   按快捷键Ctrl+F8新建一个按钮(根据个人爱好随意设计),写上“确定”二字。   3.? 设计Action影片(大家可以先跳过这段代码,看下面的步骤)   按快捷键Ctrl+F8新建一个名为“action”的影片剪辑。在“action”的场景里右键单击第1帧,选择Actions命令,在弹出的Actions Frame面板里输入如下代码:  
tellTarget ("_root") {   //调用场景中所有的影片
  dx = getProperty("action", _x)-x1;   //得到影片“action”在X轴方向上的位移
  dy = getProperty("action", _y)-y1;   //得到影片“action”在Y轴方向上的位移
  point = Number(point)+1;   //蛇的节数加1
  if (Number(point)>Number(snake)) {
    point = 0;
  }//当蛇的节数增加到默认值时,就把它重置为0,不让这条蛇无限变长   duplicateMovieClip("head", "head" add point, point);
  //复制“snake”影片,使蛇的节数不断增加   //以下代码实现蛇的运动
  x1 = getProperty("action", _x);   //把影片“action”的x轴坐标赋值给变量x1
  y1 = getProperty("action", _y);   //把影片“action”的y轴坐标赋值给变量y1
  setProperty("head" add point, _x, x1);   //把变量x1的值赋值给影片“head”
  setProperty("head" add point, _y, y1);   //把变量y1的值赋值给影片“head”

  //以下代码实现了蛇节角度的变化,从而使效果逼真   if (Number(dx) == 0) {
    ror = 90;
    //如果影片“action”在的坐标在x轴方向没有变化,则让影片“snake”的角度为90度。其实这也很好理解,因为蛇的头和节都是水平方向设计的,如果影片“snake”的x轴坐标不变,说明蛇在做垂直运动,“ror = 90;”就是让蛇的角度也变垂直。
    //ror就是控制蛇节角度的变量
  } else {
    x = dy/dx; //这个x就是角度的正切值
    if (Number(x)<0.99 and Number(x)>Number(-0.99)) {
    //如果角度值在(-1,1)之间就执行下面的语句
      ror = x*40;
    //计算角度值,简单让它乘以40(也可以不乘),这样做蛇可能就不那么光滑了。还好颜色可以帮忙,而且这条蛇也不是很大。
    } else if (Number(x) == 1) {
      ror = 45;
      //如果角度值恒等于1就设角度为45度
    } else if (Number(x) == -1) {
      ror = -45;
    } else if (Number(x)>1.01) {
      ror = 90-1/x*50;
    } else {
      ror = -90-1/x*50;
    }
  }   if (Number(dx)<0) {
    ror = ror-180;
  }
  setProperty("head" add point, _rotation, ror);
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号