1

我正在制作一个游戏,您可以在其中骑自行车穿越一些山丘。我在自行车车架和车轮之间创建接头时遇到问题 - 接头以某种方式拉伸,它们不牢固。

我尝试了一些具有不同设置的不同关节,但它总是发生。我不想要摊销,只想要我的自行车和它的轮子之间的牢固连接。

这是我现在使用的设置:

    mFrame = new Frame(pX, pY, pPhysicsWorld);
    mWheelFront = new Wheel(pX + 47.0f, pY - 28.0f, pPhysicsWorld);
    mWheelRear = new Wheel(pX - 53.0f, pY - 28.0f, pPhysicsWorld);

    this.attachChild(mWheelFront);
    this.attachChild(mWheelRear);
    this.attachChild(mFrame);

    final RevoluteJointDef revoluteJointDefFront = new RevoluteJointDef();
    revoluteJointDefFront.initialize(this.mFrame.getBody(), this.mWheelFront.getBody(), this.mWheelFront.getBody().getWorldCenter());
    revoluteJointDefFront.collideConnected = false;
    revoluteJointDefFront.maxMotorTorque = 100f;
    pPhysicsWorld.createJoint(revoluteJointDefFront);

    final RevoluteJointDef revoluteJointDefRear = new RevoluteJointDef();
    revoluteJointDefRear.initialize(this.mFrame.getBody(), this.mWheelRear.getBody(), this.mWheelRear.getBody().getWorldCenter());
    revoluteJointDefRear.collideConnected = false;
    revoluteJointDefRear.maxMotorTorque = 100f;
    pPhysicsWorld.createJoint(revoluteJointDefRear);

我做错了什么?如何获得那些“牢固”的关节?

4

1 回答 1

5

可能的解决方案:

  1. 使自行车车身和车轮的质量差别不大。它们也不应该很大。根据 box2d 手册,当质量比超过 10:1 时稳定性会降低。你的问题很可能就在那里。
  2. 缩放世界,使运动物体的大小在 0.1 到 10 米之间。Box2D 手册说:

    连续碰撞不处理关节。因此,您可能会在快速移动的物体上看到关节拉伸。

    如果您使用不良缩放,那么速度可能非常高。

  3. 增加位置和速度迭代次数。Box2D 手册说:

    Box2D 的建议迭代次数是速度为 8 次,位置为 3 次。您可以根据自己的喜好调整此数字,但请记住,这需要在速度和准确性之间进行权衡。

  4. 使时间步长更小(并增加 fps,以保持物理速度正常)。根据我的经验,时间步长 1/60 秒很好,1/30 不太好,但仍然有效,1/20 相当不稳定,只能模拟简单的模型。

ps你的地面身体不是最佳的:)固定装置的数量可以更少。如果您为移动平台编程,这一点尤其重要。

于 2013-07-18T12:16:34.240 回答