我正试图在Box2D世界中跟随玩家的相机。但有一个抵消。我认为它与像素每米转换有关。在检查我的代码之前,您应该知道Values.WTB = World_To_Box and has a values of 0.032f
和Values.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();
}
这是图片展示:
绿色点是玩家中心的位置,橙色点是相机中心所在的位置。你进一步从0,0坐标开始,更大的是偏移。
我做错了什么?
答案 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
。这只是一个小小的差异,但它最终会产生影响。