我正在尝试编写一个简单的2D平台游戏,而我希望播放器能够通过某些平台。不幸的是,我的玩家无缘无故地在某些平台上摔倒:



那显然不是我想要的。我只能想象的是,由于某种原因,盒子的高度不一样。但是如何解决呢?这是我的一些代码:

createPlatform ...

public static Body createPlatform(World world, int x, int y) {
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.StaticBody;
    bodyDef.position.set(new Vector2(x, y));
    PolygonShape shape = new PolygonShape();
    shape.setAsBox(1, 1);
    Body body = world.createBody(bodyDef);
    body.createFixture(shape, Constants.GROUND_DENSITY);
    body.resetMassData();
    PlatformUserData userData = new PlatformUserData(1, 1, Constants.GROUND_IMAGE_PATH);
    body.setUserData(userData);
    shape.dispose();
    return body;
}


Runner.java-act()

@Override
public void act(float delta) {
    super.act(delta);
    body.setLinearVelocity(new Vector2(10f,0));
}

最佳答案

当您将地面由多个部分组成时,碰撞检测框架可能会检测到下一个块的边缘,就像它比前一个块高一些。这是有时会与每个滑动对象发生的计算错误。这就是为什么他们经常将播放器的形状设置为椭圆形并冻结对象的旋转的原因。

10-08 08:37