Flash制作技巧:球和直线的碰撞检测

2008-04-02 10:45:55来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  原理很简单,用点到直线的距离进行判断,没加回帧,所以假如加上碰撞反应,会有问题,代码如下:

  

import fc.math.Degree;

  class Wall {

   private var _wall:MovieClip;

   private var _cenx:Number;

   private var _ceny:Number;

   private var _k:Number;

   private var a1:Number;

   private var b1:Number;

   private var c1:Number;

   public function Wall(w) {

   _wall = w;

   init();

   }

   public function get target():MovieClip {

   return _wall;

   }

   private function init():Void {

   _cenx = _wall._x;

   _ceny = _wall._y;

   _k = Degree.tanD(_wall._rotation);

   a1 = -_k;

   b1 = 1;

   c1 = _k*_cenx-_ceny;

   }

   public function checkCollision(mc):Boolean {

   var x0 = mc._x;

   var y0 = mc._y;

   var r = mc._width/2;

   var t1 = a1*x0 b1*y0 c1;

   var t2 = a1*a1 b1*b1;

   return t1*t1/t2
   }

  }

  //test

  import Wall;

  var t1 = [new Wall(line1), new Wall(line2), new Wall(line3), new Wall(line4)];

  setInterval(test, 30);

  function test() {

   for (var i in t1) {

   var t = t1[i].checkCollision(mc);

   if (t) {

   t1[i].target.gotoAndStop(2);

   } else {

   t1[i].target.gotoAndStop(1);

   }

   }

  }

  拖动进行测试:

  

  


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Flash视觉特效:科技之光

下一篇: 巧用Flash的Media组件实现多首mp3连播