Я пытаюсь использовать Box2D Debug Renderer вместе с моими спрайтами и телами LibGDX. Проблема, с которой я сталкиваюсь, заключается в том, что Renderer рисует Box Body в центре экрана, а затем Sprite рисуется в месте по умолчанию (0,0) в левом нижнем углу экрана. Когда я перемещаю автомобильный спрайт, автомобиль и поле отладки перемещаются, поэтому они не перекрываются.
Я знаю, что проблема связана с камерой, потому что я возился с разными значениями камеры уже пару дней. Иногда они перекрываются, но тогда тело отладки Box2D движется быстрее, чем спрайт автомобиля.
Иногда тело Box2D находится в том же положении, что и Sprite, но очень маленьком. Я использую 2 камеры. Один из них имеет разрешение 720 x 480. Камера отладки указана в метрах, поэтому ее размер 24 x 16.
Вот некоторый код, в котором может быть проблема (я использую сцены и актеры):
BattleScreen.java:
public void show() {
battleStage = new Stage( 720, 480, false );
// The Box2D Debug Renderer will handle rendering all physics objects for debugging
debugRenderer = new Box2DDebugRenderer( true, true, true, true );
debugCam = new OrthographicCamera( 24, 16 );
}
public void render() {
// Set the Camera matrices
battleStage.getCamera().update();
// Update the Physics World, use 1/45 for something around 45 Frames/Second for mobile devices
physicsWorld.step( 1/45.0f, 8, 3 ); // 1/45 for devices
// Again update the Camera matrices and call the debug renderer
//debugCam.update();
debugRenderer.render( physicsWorld, debugCam.combined );
// Update all Game Objects then Draw them
battleStage.act(delta);
battleStage.draw();
}
Car.java:(также актер)
public Car(Texture texture ) {
super( "Car" );
mSprite = new Sprite( texture );
mSprite.setSize( 54, 105 );
mSprite.setOrigin( mSprite.getWidth()/2, mSprite.getHeight()/2); // set the origin to be at the center of the body
FixtureDef carFixtureDef = new FixtureDef();
mBody = Physics.createBoxBody( BodyType.DynamicBody, carFixtureDef, mSprite );
}
public static Body createBoxBody( final BodyType pBodyType, final FixtureDef pFixtureDef, Sprite pSprite ) {
final BodyDef boxBodyDef = new BodyDef();
boxBodyDef.type = pBodyType;
// Temporary Box shape of the Body
final PolygonShape boxPoly = new PolygonShape();
final float halfWidth = pSprite.getWidth() * 0.5f / Consts.PIXEL_METER_RATIO;
final float halfHeight = pSprite.getHeight() * 0.5f / Consts.PIXEL_METER_RATIO;
boxPoly.setAsBox( halfWidth, halfHeight ); // set the anchor point to be the center of the sprite
pFixtureDef.shape = boxPoly;
final Body boxBody = BattleScreen.getPhysicsWorld().createBody(boxBodyDef);
boxBody.createFixture(pFixtureDef);
boxPoly.dispose();
return boxBody;
}
И что еще хуже. Это действительно усложняется, когда я пытаюсь заставить основную камеру следовать за машиной.