2016-09-07 6 views
0

私はLibGDXとBox2Dでいくつかのブレークアウトゲームをコーディングしようとしています。しかし、私が理解していない1つの点があります。 2つのレンガがエッジでのみ接触する必要があります。しかし、エミュレータでは、私はちょうど入れ子の2つのレンガを見た。LibGDX + Box2D:オブジェクトの位置付け

ここcreateBoxメソッドのコードです:

private void createBox(float posX, float posY, float boxW, float boxH) { 
    BodyDef bodyDef = new BodyDef(); 
    bodyDef.type = BodyDef.BodyType.StaticBody; 
    bodyDef.position.set(posX, posY); 

    Body body = world.createBody(bodyDef); 

    PolygonShape shape = new PolygonShape(); 
    shape.setAsBox(boxW, boxH); 

    FixtureDef fixtureDef = new FixtureDef(); 
    fixtureDef.shape = shape; 
    fixtureDef.density = 1f; 

    Fixture fixture = body.createFixture(fixtureDef); 

    shape.dispose(); 
} 

enter image description here

編集:コードを掛けました。

createBox(CONS_HOLDER.BRICKS_LEFT_MARGIN + (i * CONS_HOLDER.BRICK_WIDTH * 2), 
         CONS_HOLDER.BRICK_TOP_SCREEN_MARGIN + (j * CONS_HOLDER.BRICK_HEIGHT * 2) + CONS_HOLDER.BRICKS_TOP_MARGIN, 
         CONS_HOLDER.BRICK_WIDTH/2, 
         CONS_HOLDER.BRICK_HEIGHT/2); 

答えて

1

パラメータはhalf-widthhalf-heightあるsetAsBox(float, float)状態のドキュメント。正しいサイズを得るには、ボックスの寸法を半分に分割する必要があります。

private void createBox(float posX, float posY, float boxW, float boxH) { 
    BodyDef bodyDef = new BodyDef(); 
    bodyDef.type = BodyDef.BodyType.StaticBody; 
    bodyDef.position.set(posX, posY); 

    Body body = world.createBody(bodyDef); 

    PolygonShape shape = new PolygonShape(); 
    shape.setAsBox(boxW/2.f, boxH/2.f); 

    FixtureDef fixtureDef = new FixtureDef(); 
    fixtureDef.shape = shape; 
    fixtureDef.density = 1f; 

    Fixture fixture = body.createFixture(fixtureDef); 

    shape.dispose(); 
} 

ドキュメント:ドキュメントは、私たちがそのように使うべきと言う場合は、返信用https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/physics/box2d/PolygonShape.html#setAsBox-float-float-

+0

感謝、それは大丈夫です。しかし、私はなぜこの論理が理解できないのでしょうか? 2ボックスのx座標とy座標を乗算すると、肯定的な結果になります。ボックスのHとWを分けると、私が構築した論理全体を変える必要があります。 – Utku

+0

これはBox2Dの設定方法です。ボックスの幅と高さは指定されていますが、パラメータは必要なサイズの半分です。 – waffre

+0

ありがとう – Utku