繁体   English   中英

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

[英]AndEngine Box2d - how to avoid joint “stretching”?

我正在制作一个游戏,你骑自行车穿过一些山丘。 我有一个问题,就是在自行车架和它的车轮之间建立关节 - 关节会以某种方式伸展,它们不牢固。

我尝试了不同设置的不同关节,但总是发生。 我不需要摊销,只是我的自行车和车轮之间的紧密联系。

这是设置,我现在使用:

    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);

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

可能的解决方案:

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

    连续碰撞不能处理关节。 所以你可能会在快速移动的物体上看到关节伸展。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM