2016-09-07 4 views
0

저는 LibGDX와 Box2D로 몇 개의 브레이크 아웃 게임을 코딩하려고합니다. 그러나 내가 이해하지 못하는 한 가지 점이있다. 가장자리가있는 두 개의 벽돌 만 만져야합니다. 하지만 에뮬레이터에서 방금 두 개의 벽돌을 중첩시켜 보았습니다.LibGDX + Box2D : Object Positioning

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 방법의 코드입니다.

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

setAsBox(float, float)에 대한 문서는 매개 변수가 half-widthhalf-height을 것을 말한다. 올바른 크기를 얻으려면 상자 크기를 반으로 나누어야합니다.

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 좌표를 곱하면 긍정적 인 결과를 얻습니다. 상자의 높이와 너비를 나눌 때, 나는 내가 만든 모든 논리를 바꿔야합니다. – Utku

+0

그건 바로 Box2D가 설정된 방식입니다. 상자의 너비와 높이는 여전히 지정되지만 매개 변수는 원하는 크기의 절반입니다. – waffre

+0

정말 고마워요. – Utku