Как использовать камеры LibGDX с Box2D Debug Renderers

Я пытаюсь использовать Box2D Debug Renderer вместе с моими лириками и телами LibGDX. Проблема, с которой я сталкиваюсь, заключается в том, что Renderer рисует тело коробки в центре экрана, а затем Sprite рисует по умолчанию по умолчанию (0,0) в левом нижнем углу экрана. Когда я перемещаю Car Sprite, то и Car, и Debug Box перемещают их, чтобы они не перекрывались.

Я знаю, что проблема связана с камерой, потому что я уже несколько дней возился с разными значениями камеры. Несколько раз они перекрываются, но затем Box2D Debug Body движется быстрее, чем Car Sprite.

Несколько раз корпус Box2D находится в том же положении, что и Sprite, но очень мал. Я использую 2 камеры. Один из них – 720 x 480. Камера отладки находится в метрах, поэтому ее 24 x 16.

Вот некоторый код, где может возникнуть проблема (я использую Stages and Actors):

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; } 

И еще хуже. Это действительно усложняется, когда я пытаюсь заставить главную камеру следовать за автомобилем.

Как насчет battleStage.getCamera().combined Комбинированный работал отлично для меня.

Вы должны применить следующую инструкцию для объединения тела с текстурой, нарисованной stage.setCamera (камера);