【发布时间】:2013-08-06 16:02:33
【问题描述】:
我遇到了圆形碰撞问题,不是碰撞检测本身,而是解决碰撞的处理程序。
为简单起见,我将使用两个圆圈。一个是半径为 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;
上面的代码在涉及两个具有相同半径的圆时可以完美运行。当圆圈相交时(例如,在靠近每个圆圈的坐标中生成),圆圈会彼此分开。
当圆圈有两种不同的大小时,问题就开始了。当它们相交时会发生什么,看起来较大的圆圈从较小的圆圈跑开,但仍然连接。
你们中有人知道为什么会这样吗?
【问题讨论】:
标签: actionscript-3 collision geometry