libgdx+;box2d接头在重力作用下工作不正常

libgdx+;box2d接头在重力作用下工作不正常,libgdx,box2d,revolute-joints,Libgdx,Box2d,Revolute Joints,我试图通过连接静态物体和动态物体,使用box2d/libgdx创建一个钟摆。 我尝试过各种类型的关节,如距离关节、绳关节和旋转关节,但在重力作用下,动力体在最初受到关节约束后总是向下逃逸。只有在失重状态下,接头才能正常工作。我知道我一定在做一些非常愚蠢的事情 world.getBodies(p); DistanceJointDef djd=new DistanceJointDef(); djd.bodyA=p.get(0); djd.bo

我试图通过连接静态物体和动态物体,使用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:它也可以在密度为零的情况下工作

确保你至少有一次速度迭代。当我使用zero时,关节慢慢膨胀

ContactListener与此无关,它不会有任何帮助


另一件事:将DistanceJoint的长度设置为50米。那是一段相当长的距离。Box2D针对1x1米物体进行了优化。它仍然可以工作,我对它进行了测试,但您可能应该使用更小的对象和更小的摄影机视口。

如果我没有弄错您的问题,那么无论您应用的关节类型如何,您移动的身体都会下落。可能发生这种情况的一个原因是,你可能已经将锚和摆都定义为动态物体,并且由于重力的作用,它们都以相同的方式下落


我假设您尚未渲染锚体,因此您不会看到它掉落

你的动态身体有一个非零密度吗?我试过你的代码,它是有效的,但我仍然不知道为什么我不能对我的代码做同样的事情。我的代码稍微复杂一些,但本质上是相同的。如果你和我们分享更多的代码,我们可以搜索错误。我唯一的想法是,你可以用零速度迭代来踏遍世界。