我正在尝试实施圆圈以圈选游戏。我试图让球在碰撞时以正确的方式反弹。我已经尝试了几个教程,并在stackoverflow上阅读了多个问题,但没有一个真正帮助我。
我的问题:如何在这两种情况下实现圆圈碰撞: 1:移动球与不动球碰撞。 2:移动球与移动球碰撞
我试过的其中一个教程:
这是我目前拥有的代码,它在某种程度上起作用但是非常小问题:
function newCollide(ball1, ball2)
{
a = ball1.position.x - ball2.position.x;
b = ball1.position.z - ball2.position.z;
ab = Math.sqrt(((a * a) + (b * b)));
if(ab <= 1.1)
{
console.log("collision");
ball2.speedX = ball1.speedX;
ball2.speedZ = ball1.speedZ;
ball1.speedX *= 0.3;
ball1.speedZ *= 0.3;
ball1.position.x += ball1.speedX;
ball1.position.z += ball1.speedZ;
ball2.position.x += ball2.speedX;
ball2.position.z += ball2.speedZ;
}
}
感谢任何帮助。
答案 0 :(得分:1)
在相同的非旋转磁盘的碰撞中,磁盘只是简单地交换它们的速度矢量。
在碰撞测试中,您还应检查原始移动是否朝向彼此,以避免虚假振荡。
在碰撞过程中位置不会改变,您应该完全删除位置更新。