AndEngine Box2d - 如何避免联合“伸展”?

问题描述 投票:1回答: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);

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

java android box2d andengine
1个回答
4
投票

可能的解决方案:

  1. 使自行车车身和车轮的质量差别不大。它们也应该不是很大。根据box2d手册,当质量比超过10:1时,稳定性降低。最有可能你的问题就在那里。
  2. 缩放世界,使移动物体的大小在0.1到10米之间。 Box2D手册说: 连续碰撞不能处理关节。所以你可能会在快速移动的物体上看到关节伸展。 如果使用不良缩放,则速度可能非常高。
  3. 增加位置和速度迭代次数。 Box2D手册说: Box2D的建议迭代计数为8表示速度,3表示位置。您可以根据自己的喜好调整此数字,请记住,这需要在速度和准确度之间进行权衡。
  4. 缩短时间步长(并增加fps,以保持物理速度正常)。根据我的经验,时间步长1/60秒是好的,1/30不太好,但仍然有效,1/20相当不稳定,并且只能模拟简单的模型。

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

© www.soinside.com 2019 - 2024. All rights reserved.