使用box2d将动态体运动到斜坡上

时间:2012-09-11 10:04:17

标签: java android box2d libgdx

我是Android开发的新手,并且是我第一次尝试使用libGDX和box2d创建一个有效的Android应用程序,我正在尝试制作2D侧滚动游戏(有点类似于Mario)。

我找到了这个教程,让我开始运行:Libgdx Box2d Tiled Maps。我已经遵循了(并进行了一些更改)并且我已经使用我自己的一套瓷砖进行了运行。我遇到的问题是,当我的盒子(在示例中称为跳线)到达倾斜瓦片的底部时,它只是停止移动。如果您下载第2部分的示例并修改collisions.txt文件并将第12行更改为0x31,31x0并走到第一个斜率,您应该希望看到我的问题(该示例不会尝试处理倾斜碰撞)。我确定我的碰撞边界是正确的,因为我已经启用了调试渲染,我可以在正确的位置看到它们。

从我在互联网上进行的研究以及使用代码进行研究可能会有几个解决方案:

  1. 我尝试将盒子对象的质心改为降低并将固定旋转设置为false(jumper.sexFixedRotation(false)),以便相对于斜率和线性脉冲应用盒子角度飞机。我一直无法做到这一点。
  2. 我试过检测水平和垂直速度,如果盒子没有移动但仍然按下输入,则应用不同的线性脉冲。

        if (moveRight && !moveLeft) {
    
          if(!(Math.abs(jumper.getLinearVelocity().x) > 0.0f) && !(Math.abs(jumper.getLinearVelocity().y) > 0.00f)) {
            jumper.applyLinearImpulse(new Vector2(0.0f, 0.09f), jumper.getWorldCenter());
        } else {
            jumper.applyLinearImpulse(new Vector2(0.05f, 0.0f), jumper.getWorldCenter());
        }
        if (!jumperFacingRight) {
            jumperSprite.flip(true, false);
            jumperFacingRight = true;
        }
    }
    

    这确实有效,但是非常缓慢和跳跃(更不用说hacky!)。

  3. 我确信有一些我缺少/没想到的东西,任何建议都会受到欢迎!

0 个答案:

没有答案