2013-07-18 37 views
1

我在做一个游戏,在那里你骑着自行车穿过一些山丘。我在自行车车架和车轮之间产生关节时遇到了问题 - 关节伸展不知何故,它们并不牢固。AndEngine Box2d - 如何避免关节“拉伸”?

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

这是设置,我现在使用:

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. 使自行车体的质量和车轮差别不大。他们也不应该很大。根据box2d手册,当质量比通过10:1时,稳定性会降低。最可能你的问题在那里。
  2. 缩放世界,使移动体的大小在0.1到10米之间。 Box2D手册上说:

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

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

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

    对于Box2D,建议的迭代计数为8,速度为3,位置为3。您可以根据自己的喜好调整此数字,但请记住,这在速度和准确性之间有一个折衷。

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

p.s.你的地面是不是最佳的:)可以有更少的灯具计数。如果您针对移动平台进行编程,这一点特别重要。

+0

谢谢veeeery多!与群众一起玩这个工作! ;) 是的,我知道这不是最佳的,但是我在计算机上使用的测试质量最高,而且我仍然有60fps,但是对于手机来说,它的细节要少几倍。再次感谢! – daltostronic