2004/09/28 | 碰撞检测——研讨
类别(Flash进修) | 评论(0) | 阅读(195) | 发表于 17:14
注:本贴来自闪吧之holybozo,原贴

1。原理

假设两个球中一个是不动的,并且两个球的MC的注册点都在中心
要判断球有没有碰到,只要算出球A和球B间的距离是否大于球A和球B的半径只和

var disX=ballB._x-ballA._x; // 球A和球B在x轴上的差距
var disy=ballB._y-ballA._y; // 球A和球B在y轴上的差距
var diss=Math.sqrt(disX*disX+disY*disY); // 球A和球B的距离
var sum_radii=ballA.radii+ballB.radii; // 球A和球B的半径之和
if(diss<=sum_radii){ // 判断距离和半径之和的大小
trace("两球碰到了");
}


2。优化

上面就是判断碰撞的基本条件,我们可以稍微换一下,把Math.sqrt去掉,直接使用平方来做,也是一样的,
因为sqrt实在是浪费资源

// 修改为:
var disX=ballB._x-ballA._x; // 球A和球B在x轴上的差距
var disy=ballB._y-ballA._y; // 球A和球B在y轴上的差距
var diss=disX*disX+disY*disY; // 球A和球B的距离
var sum_radii=ballA.radii+ballB.radii; // 球A和球B的半径之和
if(diss<=(sum_radii*sun_radii) ){ // 判断距离和半径之和的大小
trace("两球碰到了");
}


3。难题

当小球速度过大,会导致球A盖在球B的上面,更可怕的是,球A一次性串过了球B.
所以像上面那样的判断,是不够的.
0

评论Comments