背景
我正试图从一个很高的层次上弄清楚,为什么我会使用b2.js (box2d的包装库)得到一些意想不到的行为。我试图在一个化学系统中模拟粒子的晶体结构,(都表示为b2body矩形),所以我想我可以用b2Joint 对象将粒子连接在一起,并创建一个由单个矩形组成的刚性格子。
当我把b2Body粒子放在屏幕上而不连接它们的时候,身体的物理看起来是正确的。然而,当我将晶体的单位与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;
}发布于 2019-02-04 05:23:05
当box2d的属性为假时,由关节连接的https://github.com/erincatto/Box2D/blob/master/Box2D/Dynamics/Joints/b2Joint.h#L82体会相互渗透。这是默认设置。
将碰撞连接属性设置为真,应启用连接体之间的碰撞处理,使它们不再相互穿透。
我喜欢的关于box2d接口的教程以及更多的细节可以在:http://www.iforce2d.net/b2dtut/joints-overview获得。
https://stackoverflow.com/questions/54497041
复制相似问题