我正在尝试通过连接静态和动态物体来使用 box2d/libgdx 创建一个钟摆。我尝试过各种类型的关节,如距离接头、绳索接头和蜗壳关节,但在重力作用下,动态物体在最初受到关节约束后总是最终会逃逸下来。只有在零重力下,关节才能正常工作。我知道我一定在做一件非常愚蠢的事情。
world.getBodies(p);
DistanceJointDef djd=new DistanceJointDef();
djd.bodyA=p.get(0);
djd.bodyB=p.get(1);
djd.localAnchorA.set(0,0);
djd.localAnchorB.set(0,0);
djd.collideConnected=true;
DistanceJoint pend=(DistanceJoint)world.createJoint(djd);
pend.setLength(50);
附言。我必须实现一个联系人侦听器。我还没有弄清楚如何做到这一点。设置碰撞侦听器会有所帮助吗?
我尝试了您的确切代码,它可以工作。以下是完整的测试:
@user3312130:它的密度也为零。
确保以至少一次速度迭代来步进世界。当我使用零时,关节慢慢扩大。
ContactListener与此没有任何关系,它无济于事。
另一件事:您将距离接头的长度设置为 50 米。这是一个相当大的距离。Box2D 针对 1x1 米对象进行了优化。它仍然可以工作,我测试了它,但你可能应该使用更小的对象和更小的相机视口。
如果我答对了你的问题,无论你使用的关节类型如何,你的运动身体都会下降。发生这种情况的一个原因是,您可能已经将锚和钟摆都定义为动态物体,并且由于重力,两者都以相同的方式下落。
我假设您尚未渲染锚体,因此您看不到它下降。