2012-12-11 39 views
0

我遇到了libGDX中Camera类的问题,即使它的位置发生变化,我也无法直观地移动它。无法移动libgdx OrthographicCamera

这是我如何设置摄像机:

camera = new OrthographicCamera(frustumWidth, frustumHeight); 

这是我如何改变自己的立场:

world.onUpdate(deltaTime, camera); 
    renderer.render(world); 
    camera.position.set(MathUtils.random(0, 800), MathUtils.random(0, 480), 0); 
    //camera.position.set(
     // world.dynamicObjects.get(GameWorld.MainPgID).pos.x * GameWorld.frustumToWorldRatio, 
      //world.dynamicObjects.get(GameWorld.MainPgID).pos.y * GameWorld.frustumToWorldRatio, 0); 

我在.render函数开始提交更改

camera.update(); 
     batcher.setProjectionMatrix(camera.combined); 
     batcher.begin(); 
     polygonBatcher.begin(); 

正如我所说的位置确实改变了,但我尝试过的很多组合都没有任何作用。 也许我误解了相机的工作原理,我需要移动物体而不是相机?似乎是愚蠢的,毕竟它被称为相机的原因。

回答

1

您必须将组合投影矩阵应用到您希望影响的每个批处理/渲染器上。

但除此之外,它似乎很好。尝试逐步调试它。 设置一个简单的项目只有new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());和一些行(ShapeRenderer)或精灵(SpriteBatch),将投影矩阵设置为camera.combined,将camera.positionupdate()更改为摄像机。这应该做到这一点。

然后,当您更改camera.position时,所有具有相机平截头体的渲染器都应相应地偏移而不更改精灵/几何体的偏移量。

btw。视口不是0 - 800,而是x和-400 - 400分别用于x和y;

+0

我有一个类似的问题:当我'camera.position.set(x,y,0)',它渲染了一帧的错误区域。你的答案帮了很大忙。 – gvlasov