首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么box2d物体通过连接时互相穿透?

为什么box2d物体通过连接时互相穿透?
EN

Stack Overflow用户
提问于 2019-02-02 20:07:04
回答 1查看 384关注 0票数 0

背景

我正试图从一个很高的层次上弄清楚,为什么我会使用b2.js (box2d的包装库)得到一些意想不到的行为。我试图在一个化学系统中模拟粒子的晶体结构,(都表示为b2body矩形),所以我想我可以用b2Joint 对象将粒子连接在一起,并创建一个由单个矩形组成的刚性格子。

当我把b2Body粒子放在屏幕上而不连接它们的时候,身体的物理看起来是正确的。然而,当我将晶体的单位与b2Joint连接在一起时,b2Body 盒现在能够重叠并穿透彼此的

我不知道为什么会发生这种情况,并希望得到任何指导。

行为视频

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

来自b2.js库的代码

以下是创建连接的b2.js的相关代码:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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获得。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54497041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档