Three.js围绕圈子碰撞

时间:2016-10-14 11:17:50

标签: javascript three.js physics

我正在尝试实施圆圈以圈选游戏。我试图让球在碰撞时以正确的方式反弹。我已经尝试了几个教程,并在stackoverflow上阅读了多个问题,但没有一个真正帮助我。

我的问题:如何在这两种情况下实现圆圈碰撞: 1:移动球与不动球碰撞。 2:移动球与移动球碰撞

我试过的其中一个教程:

tutorial

这是我目前拥有的代码,它在某种程度上起作用但是非常小问题:

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;
    }
}

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在相同的非旋转磁盘的碰撞中,磁盘只是简单地交换它们的速度矢量。

在碰撞测试中,您还应检查原始移动是否朝向彼此,以避免虚假振荡。

在碰撞过程中位置不会改变,您应该完全删除位置更新。