Libgdx正交相机的初始位置

8
我希望相机的位置正确,但我得到了以下结果:

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个回答

6

这将在游戏的 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
但是这并不会居中于地图的中心,它会居中于“视口(viewport)”的中心。如果它们相同,那就没问题,否则这不是解决方案。 - bemeyer

3
你没有设定相机的位置。因此默认情况下它将看向(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)位于屏幕中心吗?谢谢。 - Lorence Hernandez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接