LibGDX - 如何在屏幕上居中等距平铺地图?

时间:2017-11-09 01:29:23

标签: java android libgdx isometric

我几天来一直在修复LibGDX。我已经设法将Isometric Tiled Map渲染到屏幕上,但我似乎无法弄清楚如何正确地居中。这是代码:

public class PlayScreen implements Screen {

    private TiledMap map;
    private IsometricTiledMapRenderer isometricRenderer;
    private OrthographicCamera camera;

    public void createUI() {
        // Load map from tiled .tmx file.
        map = new TmxMapLoader().load("arena1/arena1.tmx");

        // Setup isometric renderer and camera.
        isometricRenderer = new IsometricTiledMapRenderer(map);
        camera = new OrthographicCamera();
    }

    @Override
    public void show() {
        Gdx.gl.glClearColor(0, 0, 1, 1);
        createUI();
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        isometricRenderer.setView(camera);
        isometricRenderer.render();
    }

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

    @Override
    public void pause() {}

    @Override
    public void resume() {}

    @Override
    public void hide() {}

    @Override
    public void dispose() {
        map.dispose();
        isometricRenderer.dispose();
    }

}

这就是我得到的:

enter image description here

提前谢谢!

2 个答案:

答案 0 :(得分:0)

Tiled map没有setPosition方法或类似的东西。所以你应该做的是移动你的相机。

在渲染方法中调用此方法以通过WASD移动相机:

private void cameraController(Camera camera){

    if (Gdx.input.isKeyPressed(Input.Keys.W)) {
       camera.translate(0, 10, 0);
    }
    if (Gdx.input.isKeyPressed(Input.Keys.S)) {
       camera.translate(0, -10, 0);
    }
    if (Gdx.input.isKeyPressed(Input.Keys.A)) {
       camera.translate(-10, 0, 0);
    }
    if (Gdx.input.isKeyPressed(Input.Keys.D)) {
       camera.translate(10, 0, 0);
    }
}

您也可以将10更改为您想要的速度。

或者如果您不想通过WASD移动它,您可以直接设置位置。

camera.setPosition(x, y, z); 

答案 1 :(得分:0)

使用

进行管理
camera.position.set(768, 0, 0);

768是地图宽度的一半。