【问题标题】:libGDX orthographic camera view size (with Box2D)libGDX 正交相机视图大小(使用 Box2D)
【发布时间】:2016-05-25 05:36:34
【问题描述】:

我有下一个简单的课程,屏幕周围有一个球和四个墙:

SpriteBatch batch;
Box2DDebugRenderer debugRenderer;
World world;
OrthographicCamera camera;

public float VIRTUAL_WIDTH  = 720f;
public float VIRTUAL_HEIGHT = 1280f;

@Override
public void create () {

    batch = new SpriteBatch();

    camera = new OrthographicCamera(VIRTUAL_WIDTH, VIRTUAL_HEIGHT);
    world = new World(new Vector2(0, -9), true);

    debugRenderer = new Box2DDebugRenderer();

    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.DynamicBody;

    CircleShape circleShape = new CircleShape();
    circleShape.setRadius(50);

    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = circleShape;
    fixtureDef.restitution = 1;

    Body body = world.createBody(bodyDef);
    body.createFixture(fixtureDef);

    createWall(0f, -VIRTUAL_HEIGHT/2, VIRTUAL_WIDTH/2, 30f);
    createWall(0f, VIRTUAL_HEIGHT/2, VIRTUAL_WIDTH/2, 30f);
    createWall(-VIRTUAL_WIDTH/2, 0f, 30f, VIRTUAL_HEIGHT/2);
    createWall(VIRTUAL_WIDTH/2, 0f, 30f, VIRTUAL_HEIGHT/2);

}

private void createWall(float x, float y, float hx, float hy){

    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.StaticBody;
    bodyDef.position.set(x, y);

    PolygonShape polygonShape = new PolygonShape();
    polygonShape.setAsBox(hx, hy);

    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = polygonShape;

    world.createBody(bodyDef).createFixture(fixtureDef);

}

@Override
public void render () {

    camera.update();

    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    world.step(1 / 60.0f, 8, 3);
    batch.setProjectionMatrix(camera.combined);

    batch.begin();
    debugRenderer.render(world, camera.combined);
    batch.end();

}

它是我设备上的下一个屏幕(可能不是完美的屏幕截图):

屏幕稍微向左移动,是因为舍入错误?

更新:

【问题讨论】:

标签: java android libgdx box2d


【解决方案1】:

不是这个

public float VIRTUAL_WIDTH  = 720f;
public float VIRTUAL_HEIGHT = 1280f;

试试这个

public float VIRTUAL_WIDTH  = Gdx.graphics.getWidth();
public float VIRTUAL_HEIGHT =  Gdx.graphics.getHeight();

【讨论】:

  • 试试这个,看起来更好,但现在我看不到顶墙
  • 能发截图吗
  • 将屏幕截图添加到我的问题(更新部分)
  • 尝试使用 5 像素的偏移量,看看效果如何
  • 但它只适用于我的设备,其他屏幕尺寸和分辨率如何?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多