我试图通过连接静态和动态体来使用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);
PS。我还要实现一个联系人监听器。我还没弄明白怎么做。会给碰撞听众提供帮助吗?
答案 0 :(得分:1)
我尝试了您的确切代码并且有效。 Here是完整的测试:
@ user3312130:它的密度也为零。
确保以至少一个速度迭代步进世界。当我用零时,关节慢慢扩大。
ContactListener与此无关,它无济于事。
另一件事:您将DistanceJoint的长度设置为50米。这是一个相当大的距离。 Box2D针对1x1米的物体进行了优化。它仍然可以工作,我测试了它,但你应该使用较小的对象和较小的摄像机视口。
答案 1 :(得分:0)
如果我的问题正确无误,无论您使用的关节类型如何,您的移动身体都会下降。可能发生这种情况的一个原因是因为你可能已经将锚和摆定义为动态体,并且由于重力,两者都以相同的方式下降。
我假设你还没有渲染锚体,所以你看不到它掉下来了。