2014-02-20 88 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)默認位置位於屏幕的中心?謝謝 –