分享

ActionScript菜鸟基础终极教程8

 关东老圃 2013-03-30
单击该钮,球杆往后播放,作击球动作。
  球杆影片剪辑实例:
  在主场景中将球杆和母球放在左边,将它们的中心对齐。为球杆影片剪辑添加如下ActionScript:
  onClipEvent (load) {
  _x = _root.motherball._x;
  _y = _root.motherball._y;
  }
  onClipEvent (mouseMove) {
  xsm = _root._xmouse-_x;
  ysm = _root._ymouse-_y;
  if (xsm<0) {
  _rotation = Math.atan(ysm/xsm)*(180/Math.PI);
  } else {
  _rotation = Math.atan(ysm/xsm)*(180/Math.PI)+180;
  }
  }
  Math.atan是Flash的内置函数,用它求一个数或表达式的反正切值。Math.PI是Flash的内置常数,代表圆周率。使用Math.atan计算出的反正切值的单位是弧度,而_rotation属性的单位是角度,所以要将其乘以(180/Math.PI)以实现弧度到角度的转换。
  在球杆影片剪辑的mouseMove事件中,根据鼠标位置调整_rotation属性的值,使影片剪辑跟随鼠标转动,这也是鼠标跟随动画中的一种。
  母球影片剪辑实例:
  在母球影片剪辑实例的动作面板中添加如下ActionScript:
  onClipEvent (load) {
  v = 0; //初速度
  dir = ""; //运动方向
  vx = 0; //x方向分速度
  vy = 0; //y方向分速度
  slow = 0; //加速度
  x0 = _x; //初始x位置
  y0 = _y; //初始y位置
  }
  onClipEvent (enterFrame) {
  //母球运动中
  if ((dir != "") && (slow<100)) {
  //母球落袋
  if (((_x<60) && (_y<85)) || ((_x>440) && (_y<85)) || ((_x<60) && (_y>265)) || ((_x>440) && (_y>265))) {
  _visible = false;
  trace("Bad!");
  dir = "";
  v = 0;
  vx = 0;
  vy = 0;
  slow = 0;
  _x = x0;
  _y = y0;
  _visible = true;
  //在母球位置显示球杆
  _root.stick._visible = true;
  _root.stick.gotoAndStop(1);
  _root.stick._x = x0;
  _root.stick._y = y0;
  }
  //撞击球桌左边界
  if (_x<60) {
  _x = 60;
  dir = -(180+dir);
  }
  //撞击球桌右边界
  if (_x>440) {
  _x = 440;
  dir = 180-dir;
  }
  //撞击球桌上边界
  if (_y<85) {
  _y = 85;
  dir = -dir;
  }
  //撞击球桌下边界
  if (_y>265) {
  _y = 265;
  dir = -dir;
  }
  //调整母球位置和速度
  v0 = v*(100-slow)/100;
  vx = v0*Math.cos((dir)/(180/Math.PI));
  vy = v0*Math.sin((dir)/(180/Math.PI));
  _x += vx;
  _y += vy;
  slow++;
  }
  //母球减速完毕
  if (slow == 100) {
  //在母球位置显示球杆
  _root.stick._x = _root.motherball._x;
  _root.stick._y = _root.motherball._y;
  _root.stick._visible = true;
  //重置变量
  dir = "";
  v = 0;
  vx = 0;
  vy = 0;
  slow = 0;
  }
  }

  第7章

  影片剪辑方法

  控制影片剪辑的方法很多,在ActionScript中最常用和最有用的命令是duplicateMovieClip和attachMovie,它们用于复制和附加影片剪辑,这两个命令可以实现许多效果,如下雪、棋类、射击游戏等。
  使用hitTest方法可以代替按钮实现人机交互,从这里也可以看出影片剪辑有多么强大的功能。
  startDrag和stopDrag用于对影片剪辑进行拖动,它们可以灵活地实现许多有趣的效果。

  7.1 复制和附加影片剪辑
  使用ActionScript的一大理由便是它可以极大地提高工作效率,达到事半功倍的效果。本章要介绍的两个命令  duplicateMovieClip和attachMovie便是其中的典范。

  7.1.1 Array对象
  Array对象(动作面板的“对象”/“核心”目录)即数组,它用来记录成组的相关或相似变量。数组中的单个变量称为元素,数组中的每个元素对应一个索引,访问元素需要使用索引,索引需要用方括号括起来。
  如下所示的ActionScript创建一个空的数组:
  myArray = new Array();
  如下所示的ActionScript创建一个确定值的数组并在输出窗口中显示每个元素的值:
  weekDay = new Array("SUN", "MON", "TUE", "WED", "TUR", "FRI", "SAT");
  for (var i = 0; i<7; i++) {
  trace(weekDay[i]);
  }
  数组中还可以嵌套数组,即构成多维数组,如下所示:
  polyArray = new Array();
  for (var i = 0; i<3; i++) {
  polyArray[i] = new Array(i*3+1, i*3+2, i*3+3, i*3+4);
  trace(polyArray[i][0]+" "+polyArray[i][1]+" "+polyArray[i][2]+" "+polyArray[i][3]);
  }
  输出窗口中将显示:
  1 2 3 4
  4 5 6 7
  7 8 9 10

  7.1.2 复制影片剪辑
  duplicateMovieClip动作(动作面板的“动作”/“影片剪辑控制”目录)和MovieClip对象(动作面板的“对象”/“影片”目录)中的duplicateMovieClip方法都用于在影片播放时创建影片剪辑的实例,也即复制场景中的父影片剪辑以产生新的影片剪辑。它们和后面要介绍的attachMovie方法对于要在影片中重复产生较多相同图形或动画对象时非常有用,如棋类游戏、射击游戏、鼠标跟随、下雪等特效动画。
  要使用duplicateMovieClip动作和MovieClip.duplicateMovieClip方法,首先需要在场景中创建用来复制的父影片剪辑,并且在属性面板中为该父影片剪辑实例命名,该影片剪辑实例名称将作为duplicateMovieClip的参数之一。
  在帧动作中使用duplicateMovieClip动作的方法如下所示:
  duplicateMovieClip("parentMC", "childMC", 10);
  其中,第1个参数parentMC是父影片剪辑的唯一标识符,第2个参数childMC是复制产生的新影片剪辑实例的唯一名称,第3个参数10是新影片剪辑的深度级别(level)。深度级别的概念与层类似,较高深度级别中的图形会遮挡住较低深度级别中的图形,影片剪辑所在的深度级别越高就越贴近我们的视线。在同一个深度级别中只能有一个影片剪辑实例,如果在同一深度级别中添加多于一个影片剪辑实例,新的影片剪辑实例将替换掉旧的影片剪辑实例。
  复制产生的影片剪辑实例与父影片剪辑实例的位置是重叠在一起的,所以一般还需要调整新影片剪辑实例的坐标等属性,以使其按照需要显示,如下所示:
  _root.parentMC._visible = false;
  duplicateMovieClip("parentMC", "childMC", 10);
  _root.childMC._x = 275;
  _root.childMC._y = 200;
  运行以上脚本,屏幕中只能看到新影片剪辑实例,而父影片剪辑实例不见了。从这里也可以看出,父影片剪辑实例的属性并不会影响到复制产生的新实例。
  通常情况下,可以用与下面类似的方法复制多个影片剪辑实例:
  _root.parentMC._visible = false;
  n = 50;
  for (i=0; i  duplicateMovieClip("parentMC", "childMC"+i, 10+i);
  _root["childMC"+i]._x = 25+10*i;
  _root["childMC"+i]._y = 8*i;
  }
  在父影片剪辑中使用MovieClip.duplicateMovieClip方法如下所示:
  onClipEvent (enterFrame) {
  this.duplicateMovieClip("childMC", 10);
  _root.childMC._x += 150;
  }
  它比duplicateMovieClip动作少了第1个参数,即不需要父剪辑名称。如果以上脚本不是在父剪辑而是在别的影片剪辑中,只需要将this换成父剪辑的实例名称即可。

 

7.1.3 附加影片剪辑
  attachMovie方法也是在影片播放时创建影片剪辑的实例,它与duplicateMovieClip不同的是,attachMovie方法不需要使用父影片剪辑,而是将库中影片剪辑的实例附加到场景中。
  要使用attachMovie方法,首先需要在库面板中为要附加到场景中的影片剪辑添加链接。为影片剪辑添加链接的方法如下:
  (1)在库面板中要添加链接的影片剪辑上单击鼠标右键,在弹出的快捷菜单中选择“链接”命令。
  (2)系统弹出“链接属性”对话框,如图7-1所示。

  (3)在“链接:”后选中“为动作脚本导出”复选框,“为运行时共享导入”复选框自动变为选中状态,“标识符”文本框变为可用,并将影片剪辑的元件名称作为默认的链接标识符。

  (4)单击“确定”按钮,添加链接后的库面板。

  

 

  (3)在“链接:”后选中“为动作脚本导出”复选框,“为运行时共享导入”复选框自动变为选中状态,“标识符”文本框变为可用,并将影片剪辑的元件名称作为默认的链接标识符。

  (4)单击“确定”按钮,添加链接后的库面板。

  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多