2014-02-20 52 views
4

我希望摄像机被正确的位置,但我得到下面的结果:Libgdx正交相机初始位置

enter image description here

看来,当我调整窗口的大小一样,地图上没有得到正确呈现。为什么会发生?

代码:

public void render(float delta){ 
    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    camera.update(); 
    mapRenderer.setView(camera); 
    mapRenderer.render(background); 
    mapRenderer.render(foreground); 
    shapeRenderer.setProjectionMatrix(camera.combined); 

    //draw rectangles around walls 
    for(MapObject object : tiledMap.getLayers().get("walls").getObjects()){ 
     if(object instanceof RectangleMapObject) { 
      RectangleMapObject rectObject = (RectangleMapObject) object; 
      Rectangle rect = rectObject.getRectangle(); 
      shapeRenderer.begin(ShapeType.Line); 
      shapeRenderer.rect(rect.x, rect.y, rect.width, rect.height); 
      shapeRenderer.end(); 
     } 
    } 
    //done drawing rectangles 
} 

@Override 
public void resize(int width, int height) { 
    camera.viewportWidth = width; 
    camera.viewportHeight = height; 
} 

@Override 
public void show(){ 
    //call the tile map here 
    //I believe this is called first before render() is called 
    tiledMap = new TmxMapLoader().load("data/mapComplete.tmx"); 
    mapRenderer = new OrthogonalTiledMapRenderer(tiledMap, 1f); 

    //initiate shapeRenderer. Can remove later 
    shapeRenderer = new ShapeRenderer(); 
    shapeRenderer.setColor(Color.RED); 

    camera = new OrthographicCamera(); 
    camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
} 

回答

2

这应该在游戏的viewport居中camera

@Override 
public void resize(int width, int height) { 
    camera.viewportWidth = width; 
    camera.viewportHeight = height; 
    camera.position.set(width/2f, height/2f, 0); //by default camera position on (0,0,0) 
} 
+1

但这并不是在地图的中心。它位于“视口”中心。如果这些都是一样的,那很好,否则这不是解决方案。 – BennX

2

您没有设置摄像头的位置的任何地方。因此它默认查看(0,0)(这意味着(0,0)将位于屏幕的中心)。 TiledMapRenderer在(0,0)处渲染地图的左下角,这意味着它将填充屏幕右上角的象限。这就是你在截图中看到的。

要将其设为地图的中心,你可以这样做以下:

TiledMapTileLayer layer0 = (TiledMapTileLayer) map.getLayers().get(0); 
Vector3 center = new Vector3(layer0.getWidth() * layer0.getTileWidth()/2, layer0.getHeight() * layer0.getTileHeight()/2, 0); 
camera.position.set(center); 
+0

你好,你能告诉我为什么相机的(0,0)默认位置位于屏幕的中心?谢谢 –