LibGDX Box2D播放器磕磕绊绊

时间:2015-04-03 15:06:25

标签: java libgdx box2d

我正在尝试编写一个简单的2D平台游戏,我希望玩家可以浏览一些平台。不幸的是,我的播放器在一些平台上无缘无故地绊倒了:

enter image description here

这显然不是我想要的。我唯一可以想象的是,由于某种原因,盒子的高度不一样......但是如何解决这个问题呢?这是我的一些代码:

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));
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

问题在于玩家对地面的虚构因此速度大于摩擦支撑,因此身体会绊倒。

你必须把:

body.setFixedRotation(true);

或者降低摩擦的价值。