试图让两个球碰撞并以适当的角度弹回。 当球碰撞时,它们会卡在一起,我不知道我在这里做错了什么。
我在我的动画函数中调用了这个checkCollision()
函数
显然cx
是ball1 xpos
,cx2
是ball2 xpos
。与cy
相同。
function checkCollision () {
var dx = cx2 - cx; // distance between x
var dy = cy2 - cy; // distance between y
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < (radius1 + radius2)) {
// Collision detected. Find the normal.
var normalX = dx / distance;
var normalY = dy / distance;
//find the middle point of the distance
var midpointX = (cx + cx2)/2;
var midpointY = (cy + cy2)/2;
//bounce back
cx = midpointX - radius1*normalX;
cy = midpointY - radius1*normalY;
cx2 = midpointX - radius2*normalX;
cy2 = midpointY - radius2*normalY;
var dVector = (vx - vx2) * normalX;
dVector += (vy - vy2) * normalY;
var dvx = dVector * normalX;
var dvy = dVector * normalY;
vx -= dvx;
vy -= dvy;
vx2 += dvx;
vy2 += dvy;
}
...
我从未做过太多/任何矢量工作。有没有更简单的方法来做到这一点? 我怎么用角度写这个呢?
答案 0 :(得分:0)
您需要使用一些基本数学来检测两个圆圈之间的交点。
此处描述了类似的问题:
algorithm to detect if a Circles intersect with any other circle in the same plane
有一个C#示例可以很容易地适应Javascript。