gpt4 book ai didi

java - 如何将 LibGDX 相机与 Box2D 调试渲染器一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:12:51 24 4
gpt4 key购买 nike

我正在尝试将 Box2D 调试渲染器与我的 LibGDX Sprites 和主体一起使用。我遇到的问题是渲染器在屏幕中央绘制 Box Body,然后在屏幕左下角的默认位置 (0,0) 绘制 Sprite。当我移动 Car Sprite 时,Car 和 Debug Box 都会移动,使它们不重叠。

我知道问题出在相机上,因为这几天我一直在摆弄不同的相机值。有时它们会重叠,但 Box2D Debug Body 的移动速度比 Car Sprite 快。

有时 Box2D 主体与 Sprite 处于相同位置但非常小。我正在使用 2 个相机。一个是 720 x 480。调试相机以米为单位,所以它是 24 x 16。

下面是一些可能存在问题的代码(我正在使用 Stages 和 Actors):

战斗画面.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:(也是 Actor )

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

让事情变得更糟。当我尝试让 Main Camera 跟随汽车时,它真的变得很复杂。

最佳答案

battleStage.getCamera().combined 怎么样?结合起来对我来说效果很好。

关于java - 如何将 LibGDX 相机与 Box2D 调试渲染器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9967364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com