1

我正在尝试通过连接静态和动态主体来使用 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。我还必须实现一个联系人监听器。我还没有弄清楚如何做到这一点。设置碰撞监听器会有帮助吗?

4

2 回答 2

1

我尝试了您的确切代码并且它有效。是完整的测试:
@user3312130:它也适用于零密度。

确保以至少一次速度迭代步入世界。当我使用零时,关节慢慢扩大。

ContactListener 与此没有任何关系,它无济于事。

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

于 2014-03-09T06:12:04.303 回答
0

如果我正确地回答了您的问题,那么无论您应用哪种关节类型,您的移动身体都会下降。发生这种情况的一个原因是因为您可能将锚和钟摆都定义为动态物体,并且由于重力的原因两者都以相同的方式下落。

我假设你还没有渲染锚体,所以你看不到它下降。

于 2014-03-09T12:59:48.387 回答