我正在制作一款游戏,您可以在其中骑自行车穿越一些山丘。我在自行车车架和车轮之间创建接头时遇到问题 - 接头以某种方式拉伸(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);
我做错了什么?如何获得那些“牢固”的关节?
最佳答案
可能的解决方案:
- 使自行车车身和车轮的质量差别不大。它们也不应该很大。根据 box2d 手册,随着质量比超过 10:1,稳定性会降低。很可能你的问题就在那里。
缩放世界,使移动物体的大小在 0.1 到 10 米之间。 Box2D 手册说:
Continuous collision does not handle joints. So you may see joint stretching on fast moving objects.
如果您使用的缩放比例不佳,那么速度可能会非常高。
增加位置和速度迭代次数。 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.
缩短时间步长(并增加 fps,以保持物理速度正常)。根据我的经验,时间步长 1/60 秒很好,1/30 不太好,但仍然有效,1/20 很不稳定,只能模拟简单模型。
附注您的接地体不是最佳的:)固定装置的数量可能会更少。如果您为移动平台编程,这一点尤为重要。
关于java - AndEngine Box2d - 如何避免联合 "stretching"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17721799/