为什么 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。
背景
我试图在较高的层次上弄清楚为什么我在使用 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。