我正在做一个有球碰撞的项目,我检测这种碰撞的方式很简单。它从数组中获取一个对象,然后将自己与数组中的所有对象进行比较。如何检测碰撞是通过检查中心点距离是否低于两个半径。
这很好用,但是当你同时有 100 多个对象时,就会有很多冗余。这意味着为什么单个对象会检查屏幕另一侧的对象的位置,它碰撞的可能性很低。
我发现了一个理论,一个对象应该只检查比自己大的区域中的其他对象。然后,如果该区域内有另一个物体,就会开始检测碰撞。但这只会创建额外的检查,因为对象必须检查所有对象是否在该区域中,然后检查对象是否正在碰撞。
有没有一种方法可以有效地检测碰撞?
public function newHandler():void
{
for ( var i:int = 0; i < _objectArrayLayer1.length; i++ )
{
mcBall1 = _objectArrayLayer1[i];
for ( var j:int = i + 1; j < _objectArrayLayer1.length; j++)
{
mcBall2 = _objectArrayLayer1[j];
p1 = new Point(mcBall1.nX, mcBall1.nY);
p2 = new Point(mcBall2.nX, mcBall2.nY);
distance = Point.distance(p1,p2);
radius1 = mcBall1._radius ;
radius2 = mcBall2._radius ;
if (distance <= radius1 + radius2)
{
solveBalls( mcBall1, mcBall2 );
}
}
}