Box2d直升机物理

时间:2013-09-02 23:49:21

标签: java box2d physics

我正在使用box2d为我的物理开发java游戏,我有直升机,例如:

enter image description here

我通过设置减少重力:

body.setGravityScale(0.03f);

所以它的行为有点逼真(受重力影响很小,漂浮在空中)

要移动它,向下/向上/向左/向右我有控制器,这就是我如何控制我的直升机:

body.applyLinearImpulse(new Vector2(pValueX * 3, pValueY * 3), mainBody.getWorldCenter());

pValueX和pValueY为1或-1(左上或右下方向)

它运作良好,但现在我正在努力实现更逼真的效果,当左/右移动直升机我想稍微倾斜它所以它像真正的直升机一样工作,但找不到正确的方法怎么做,我尝试在身体的不同部位施力,但如果按左或右按下,它会使我的直升机旋转360度。

3 个答案:

答案 0 :(得分:1)

你可以做的是,只需将两个常量定义为maxForceLeft和maxForceRight。当您按下左侧时,在直升机的驾驶舱部分施加一些力并继续将其与maxForceLeft进行比较,一旦达到该值就停止施加力。对于右侧按钮,通过在尾部转子部分上施加力来做同样的操作。直升机。这样你可以避免360度旋转。根据你想要的直升机效果,你可以向上或向下施加力。

答案 1 :(得分:1)

  http://www.iforce2d.net/b2dtut/rotate-to-angle

您需要的是将身体旋转到所需的角度。 这是一个很好的教程来实现这一目标。

我希望这会有所帮助。

答案 2 :(得分:1)

这个问题很老,但是如果它仍然相关,我使用JBox2D创建了一架直升机(它几乎直接映射到Box2D)。对于左/右倾斜(即相对于飞行员向前/向后): -

heli.applyTorque(TURN_TORQUE);

heli.applyTorque(-TURN_TORQUE);

这会旋转直升机,然后如果玩家需要升力:

Vec2 force = new Vec2();
force.y = (float)Math.cos(chopper.getAngle()) * -1;
force.x = (float)Math.sin(chopper.getAngle());
force.mulLocal(ROTOR_FORCE);
heli.applyForceToCenter(force);