1

我是 android 开发的新手,作为我第一次尝试获得一个工作的 android 应用程序,我正在尝试使用 libGDX 和 box2d 制作一个 2D 横向滚动游戏(有点类似于马里奥)。

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

根据我在互联网上所做的研究以及玩弄代码,可能有几个解决方案:

  1. 我尝试将盒子对象的质心更改为降低并将固定旋转设置为假(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了!)。

我确定有一些我错过/没有想到的东西,任何建议都将受到欢迎!

4

0 回答 0