为什么 box2d bodies 对象在通过关节连接时会相互穿透?

Why do box2d bodies objects penetrate one another when linked by joint?

背景

我试图在较高的层次上弄清楚为什么我在使用 b2.js(box2d 的包装器库)时会出现一些意外行为。我正在尝试对化学系统中的粒子crystal结构进行建模(全部表示为b2body矩形),所以我认为我能够link 使用 b2Joint 绳索 对象将粒子组合在一起,并创建一个由各个矩形组成的刚性格子。

当我只是将 b2Body 粒子放在屏幕上而不连接它们时,物体的物理特性看起来是正确的。但是,当我 link 将 crystal 的单元与 b2Joint 组合在一起时,b2Body 框现在能够相互重叠和穿透.

我不确定为什么会这样,希望得到任何指导。

行为视频

https://www.youtube.com/watch?v=zEUN238gd6Q&feature=youtu.be

来自 b2.js 库的代码

这是 b2.js 中创建关节的相关代码:

function b2Joint(type, bodyA, bodyB, props) {
    var j;
    if (type=='distance') {

        // Create distance joint

    } else if (type=='pulley') {

        // Create pulley joint

    } else if (type=='wheel') {

        // Create wheel joint

    } else if (type=='rope') {

        j = new box2d.b2RopeJointDef();
        // Connection between previous and this one
       j.bodyA = bodyA.body;
       j.bodyB = bodyB.body;
       // Equilibrium length
       j.maxLength = props.separation/b2scaleFactor;
       if (props.xy != undefined) j.localAnchorA = b2scaleTo(props.xy);

    } else if (type=='revolute') {

        // Create revolute joint

    } else if (type=='mouse') {

        // Create mouse joint

    }

    j = b2world.CreateJoint(j);
    bodyA.joints.push(j);
    return bodyA.joints.length-1;
}

通过关节连接的 box2d 物体在 collide connected 属性 为假时会相互穿透。这是默认设置。

碰撞连接 属性 设置为真,应启用连接体之间的碰撞处理,以便它们不再相互穿透。

我喜欢的关于 box2d 关节的教程以及更多详细信息可在以下位置找到:http://www.iforce2d.net/b2dtut/joints-overview