2014-02-20 3 views
4

Я хотел камеру быть правильно, но я получаю результат ниже:Libgdx Orthographic камеры Исходное положение

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

Это должно центрировать camera на viewport игры.

@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

, но это не центр в центре карты. Он находится в центре 'viewport'. Если это то же самое, это нормально, иначе это не было бы решением. – 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) положение камеры по умолчанию расположено в центре экрана? спасибо –

Смежные вопросы