我正在使用box2d为我的物理开发java游戏,我有直升机,例如:
我通过设置减少重力:
body.setGravityScale(0.03f);
所以它的行为有点逼真(受重力影响很小,漂浮在空中)
要移动它,向下/向上/向左/向右我有控制器,这就是我如何控制我的直升机:
body.applyLinearImpulse(new Vector2(pValueX * 3, pValueY * 3), mainBody.getWorldCenter());
pValueX和pValueY为1或-1(左上或右下方向)
它运作良好,但现在我正在努力实现更逼真的效果,当左/右移动直升机我想稍微倾斜它所以它像真正的直升机一样工作,但找不到正确的方法怎么做,我尝试在身体的不同部位施力,但如果按左或右按下,它会使我的直升机旋转360度。
答案 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);