2013-07-18 2 views
0

Я следующее тело определено:Libgdx Box2D партия рисовать не охватывает весь полигон

//net 
    netDef = new BodyDef(); 
    netDef.position.set(new Vector2((Gdx.graphics.getWidth()/2) * WORLD_TO_BOX , 158f * WORLD_TO_BOX)); 
    netBody = world.createBody(netDef); 
    PolygonShape netShape = new PolygonShape(); 
    netShape.setAsBox(10f * WORLD_TO_BOX, 125f * WORLD_TO_BOX); 
    netBody.createFixture(netShape, 0f); 
    netShape.dispose(); 

Наряду со следующим периодическим ничьи:

batch.draw(slimeTexture, netBody.getPosition().x * BOX_TO_WORLD, netBody.getPosition().y * BOX_TO_WORLD, 10f/2, 125f/2, 10f, 125f, /*scaleX*/1, /*scaleY*/1, /*rotation*/ netBody.getAngle() * MathUtils.radiansToDegrees, 0, 0, 10, 125, /*flipX*/false, /*flipY*/false); 

Но мой конечный результат таков:

http://s16.postimg.org/i1bh331th/show.png

Я сделал это с кругом, и он работал как шарм, но я не могу понимаете, что я здесь делаю неправильно. Кто-нибудь хочет объяснить, что я испортил, поэтому я больше не буду этого делать?

ответ

0

, когда вы используете setAsBox .. вам нужно предоставить половину высоты и половину ширины, вот почему ваш текст равен 1/4 размера рисунка ... И по умолчанию, когда вы рисуете окно, тогда происхождение тела является центром, так что вы необходимо установитьрасположение текста на

(bodyPOs.x - width/2, bodyPos.y - height/2); 




    netDef = new BodyDef(); 
    netDef.position.set(new Vector2((Gdx.graphics.getWidth()/2) * WORLD_TO_BOX , 158f * WORLD_TO_BOX)); 
    netBody = world.createBody(netDef); 
    PolygonShape netShape = new PolygonShape(); 
    netShape.setAsBox(10f * WORLD_TO_BOX, 125f * WORLD_TO_BOX); // wrong 
    netShape.setAsBox(10f * WORLD_TO_BOX/2f, 125f * WORLD_TO_BOX/2f); // divide by 2(right) 

netBody.createFixture(netShape, 0f); 
netShape.dispose(); 


batch.draw(slimeTexture, netBody.getPosition().x * BOX_TO_WORLD - /*width/2f*/ 10/2, netBody.getPosition().y * BOX_TO_WORLD - /**height/2*/ 125/2f, 10f/2, 125f/2, 10f, 125f, /*scaleX*/1, /*scaleY*/1, /*rotation*/ netBody.getAngle() * MathUtils.radiansToDegrees, 0, 0, 10, 125, /*flipX*/false, /*flipY*/false);