相机跟随Box2D中的目标

时间:2014-01-11 18:14:39

标签: java libgdx box2d

我正试图在Box2D世界中跟随玩家的相机。但有一个抵消。我认为它与像素每米转换有关。在检查我的代码之前,您应该知道Values.WTB = World_To_Box and has a values of 0.032fValues.BTW = Box_To_World and has a values of 32f

这是渲染部分:

@Override
    public void render(float delta) {
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        Gdx.gl.glClearColor(0.105f,0.105f,0.105f,1f);

        camera.position.set(player.getPosition().x*Values.BTW, player.getPosition().y*Values.BTW, 0);
        camera.update();

        Matrix4 cameraCopy = camera.combined.cpy();
        cameraCopy.scl(Values.BTW);
        batch.setProjectionMatrix(cameraCopy);
        shapeRenderer.setProjectionMatrix(cameraCopy);

        batch.begin();
        player.draw(batch);
        batch.end();

        debugRenderer.render(world, cameraCopy);

        world.step(1/60f, 6, 2);

        shapeRenderer.begin(ShapeType.Filled);

        shapeRenderer.setColor(Color.GREEN);
        shapeRenderer.circle(player.getPosition().x, player.getPosition().y, 5*Values.WTB,10);

        shapeRenderer.setColor(Color.ORANGE);
        shapeRenderer.circle(camera.position.x*Values.WTB, camera.position.y*Values.WTB, 5*Values.WTB,10);

        shapeRenderer.end();
    }

这是图片展示: enter image description here

绿色点是玩家中心的位置,橙色点是相机中心所在的位置。你进一步从0,0坐标开始,更大的是偏移。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

将您的值更改为:

static final float WORLD_TO_BOX = 0.01f;
static final float BOX_TO_WORLD = 100f;

为什么0.032和32不起作用:
例如,如果要将100px转换为Box2d单位:
100 * 0.032 = 3.2
然后从Box2d单位到像素:
3.2 * 32 = 102.4

当然,如果要转换更大的价值,差异会更大。

答案 1 :(得分:1)

  

Values.WTB = World_To_Box,其值为0.032f,而值.BTW = Box_To_World,其值为32f

没有理由将WTB / BTW值更改为0.01f和100f,就像其他人建议的那样,因为你的几乎正确。转换为2的幂也比转换100快得多。

如果你想要每箱2米的32个屏幕像素,那么继续使用Values.BTW = 32f。但是,Values.WTB将是1f / 32f = 0.03125f,而不是0.032f。这只是一个小小的差异,但它最终会产生影响。