我对圆形碰撞有疑问,不是碰撞检测本身,而是解决碰撞的处理程序。
为了简单起见,我将使用两个圆圈。一个是半径为 50,另一个是 30。当圆圈相交时,这是处理程序所做的
//Calculates distance between circles
var nDistX:Number = CircleB.x - CircleA.x;
var nDistY:Number = CircleB.y - CircleA.y;
var nDistance:Number = Math.sqrt ( nDistX * nDistX + nDistY * nDistY );
//Gets the radius
var radiusA:Number = CircleA.width/2;
var radiusB:Number = CircleB.width/2;
//Calculates midpoint
var midpointX:Number = ( CircleA.x + CircleB.x )/2;
var midpointY:Number = ( CircleB.y + CircleB.y )/2;
//Calculates the new position
CircleA.x = midpointX + radiusA * (CircleA.x - CircleB.x) / nDistance;
CircleA.y = midpointY + radiusA * (CircleA.y - CircleB.y) / nDistance;
MCBallB.x = midpointX + radiusB * (CircleB.x - CircleA.x) / nDistance;
MCBallB.y = midpointY + radiusB * (CircleB.y - CircleA.y) / nDistance;
当涉及具有相同半径的两个圆时,上面的代码可以完美地工作。当圆圈相交时(例如,在靠近每个坐标的坐标中产生),圆圈会彼此分开。
当圆圈有两种不同的大小时,问题就开始了。当它们相交时会发生什么,看起来较大的圆圈从较小的圆圈中跑出来,但仍然连接着。
你们中有人知道为什么会这样吗?