2015-04-03 4 views
1

Я пытаюсь запрограммировать простой 2D-платформер, и я хочу, чтобы игрок перешел на некоторые платформы. К сожалению, мой игрок натыкается после некоторых платформ без причины:Игрок LibGDX Box2D спотыкается

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 - акт()

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

ответ

0

Проблема заключается в том, что игрок фикции против земли так скорость больше, чем опорная сила трения, так что тело отрывается.

Вы должны поставить:

body.setFixedRotation(true); 

Или спуститесь значение трения.

1

Если у вас есть земля из нескольких секций, структура обнаружения столкновений может обнаружить край следующего блока, как будто это было немного выше, чем предыдущее. Это ошибка вычисления, которая иногда возникает с каждым скользящим объектом. Вот почему они часто устанавливают форму игрока как эллипс и замораживают вращение объекта.