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

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

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<r*r;

}

}

//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);

}

}

}

拖动进行测试:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航