1

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

在此处输入图像描述

我通过设置减少了重力:

body.setGravityScale(0.03f);

所以它表现得有点逼真(受重力影响很小,漂浮在空中)

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

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

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

它效果很好,但现在我正在尝试实现更逼真的效果,当向左/向右移动直升机时,我想稍微倾斜它,这样它就可以像真正的直升机一样工作,但找不到正确的方法,我尝试过应用身体不同部位受力,但如果一直向左或向右按​​,它会使我的直升机旋转 360 度。

4

3 回答 3

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

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

我希望这会有所帮助。

于 2013-09-03T06:19:36.460 回答
1

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

于 2013-09-03T05:55:04.060 回答
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);
于 2017-01-01T14:48:31.063 回答