2015-04-03 56 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

當你的地面由多個部分組成時,碰撞檢測框架可能會檢測到下一個塊的邊緣,就像它比前一個塊有點高。這是一個計算錯誤,有時會發生在每個滑動對象上。這就是爲什麼他們經常將玩家的形狀設置爲橢圓形,並凍結對象的旋轉。