java - AndEngine Box2d - 如何避免联合 "stretching"?

标签 java android box2d andengine

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

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

这是我现在使用的设置:

    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 手册说:

    Continuous collision does not handle joints. So you may see joint stretching on fast moving objects.

    如果您使用的缩放比例不佳,那么速度可能会非常高。

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

    The suggested iteration count for Box2D is 8 for velocity and 3 for position. You can tune this number to your liking, just keep in mind that this has a trade-off between speed and accuracy.

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

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

关于java - AndEngine Box2d - 如何避免联合 "stretching"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17721799/

相关文章:

java - JFrame 中的 JGraph

android - Android错误 “SQLiteException:near ” 1“: syntax error (code1)

java - box2d libgdx - 'binding' Sprite 或其他对象的 box2d 主体

java - 什么是与 MAC 兼容的外观?

java - 将复合外键映射到复合主键

java - JFrame 仅在调整大小后显示内容 (Xuggler)

java - 组件重复 onResume

android - 项目包含 C++ 文件,但在将 Eclipse 项目转换为 android Studio 后,它没有使用受支持的 native 构建系统错误

java - 使用 Box2D 在 libgdx Actor 上输入监听器

java - Box2d 直升机物理