【问题标题】:Box2d helicopter physicsBox2d 直升机物理
【发布时间】:2013-09-02 23:49:21
【问题描述】:

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

我通过设置降低了重力:

body.setGravityScale(0.03f);

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

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

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

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

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

【问题讨论】:

    标签: java box2d physics


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
          http://www.iforce2d.net/b2dtut/rotate-to-angle
        

        您需要将身体旋转到所需的角度.. 这是实现这一目标的绝佳教程。

        我希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-11
          • 1970-01-01
          • 2017-05-21
          • 2014-07-08
          • 2012-08-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多