碰撞检测——研讨

      Flash进修 2004-9-28 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.
所以像上面那样的判断,是不够的.
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}