Flash AS 入门教程 碰撞检测hitTest函数

2019-10-08 14:17:15刘景俊

       if (k != 1) {        //这时如果这个mc上的变量k不为1
         _root.i++;        //主时间轴上的变量i加1;
         k = 1;
       //在这个mc上设置变量k=1(使一个mc拖动正确时,主时间轴上的记数变量i只加1次)
       }
       if(_root.i==6){ //如果主时间轴上的记数变量i等于6时(图形都正确拖动完毕)
        _root.nextFrame();//主时间轴跳到下1帧停下;
       }
    } else { //如果这个mc和动态文本wz1不重叠或相交
     _x = x;//把这个mc的坐标设置为前面得到的这个mc的坐标的数值
     _y = y;
    }
  }

  我们可以检测这段代码的正确性,然后我们可以把这段代码复制在其他5个mc上,只消把其中的wz1改为相应的wz2~wz6即可。

  点击查看动画效果<

  既然这六个mc上的代码都非常接近,我们应该想办法用函数的办法来处理。这六个mc上的代码中只有拖动的mc不同以及检测的文本不同,因此,这个自定义函数应该有两个参数。

  例3 打开3.4.3fla文件.在主时间轴第1帧上加上如下代码:


复制代码
   stop();
   i = 0;
   function stlx(md, mc) { //md为拖动的mc,mc为检测的文本
    stopDrag();
     if (md.hitTest(mc)) {
       if (md.k!=1) { //变量k是md上的,因此这里写成md.k
         i++;   //自定义函数是写在主时间轴上,因此主时间轴上的变量可以不用写路径
         md.k = 1;
        }
       if (i == 6) {
         nextFrame();
        }
    } else {
     md._x = md.x;
     md._y = md.y;
    }
  }

  在mc上的代码就可以大为简化

  在圆(tx1_mc)上的代码就可以写成:


复制代码
  on (press) {
  x = _x;
  y = _y;
  startDrag(this, true);
 }
  on (release) {
   _root.stlx(this, _root.wz1);
   //是在mc上写的调函数脚本,因此这里的stlx()和wz1都应该加上路径。
 }
  把tx1_mc上的代码复制到其它5个mc上,只把其中的wz1换成wz2~~wz6就行了。
  为了可以重复做这个练习,在主时间轴第2帧上加上一个按扭,在按扭上加上:
  on (release) {
  prevFrame(); //回到第1帧