【问题标题】:libgdx+box2d joints not working properly under gravitylibgdx+box2d 关节在重力作用下无法正常工作
【发布时间】:2014-03-06 07:20:06
【问题描述】:

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

【问题讨论】:

  • 你的动力体有非零密度吗?

标签: libgdx box2d revolute-joints


【解决方案1】:

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

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

ContactListener 与此无关,它无济于事。

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

【讨论】:

  • 我试过你的代码,它可以工作,但我仍然不知道为什么我不能对我的代码做同样的事情,我的代码稍微复杂但基本相同
  • 如果您与我们分享了更多代码,我们可以搜索该错误。我唯一这样的想法是,你可以以零速度迭代步入世界。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多