0

衝突検出自体ではなく、衝突を解決するハンドラーに問題があります。

簡単にするために、2 つの円を使用します。1 つは半径 50 で、もう 1 つは 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;

上記のコードは、同じ半径の 2 つの円に関して問題なく機能します。円が交差すると (たとえば、それぞれに近い座標でスポーンする場合)、円は互いに離れて移動します。

問題は、円が 2 つの異なるサイズである場合に始まります。それらが交差すると、大きな円が小さな円から離れていくように見えます。

なぜこれが起こっているのか考えている人はいますか?

4

1 に答える 1