LibGDX - 定心正射相机

时间:2016-01-06 03:52:00

标签: java android graphics libgdx

所以我正在制作一款游戏,我想让游戏中的相机以屏幕中间为中心,适用于所有设备长度。我希望this picture可以更好地解释我想要实现的目标。我试过设置相机的位置,但这对我没用。

    scrnHeight = Gdx.graphics.getHeight();
    if (scrnHeight <= HEIGHT) {

        cam.setToOrtho(false, 480, 800);
    } else {
        cam.setToOrtho(false, 480, scrnHeight);
    }

    //This is the part that seems to be giving me all the issues
    cam.position.set(cam.viewportWidth/2,cam.viewportHeight/2, 0);
    cam.update();

    Gdx.input.setInputProcessor(this);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    gsm.update(Gdx.graphics.getDeltaTime());
    gsm.render(batch);

    batch.begin();
    batch.draw(border, -(border.getWidth() - WIDTH) / 2, -(border.getHeight() / 4));
    batch.end();

当我设定位置或发生的导致缺乏垂直居中的情况时,我不知道我是否给它错误的坐标。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

LibGDX中的正交相机位置意味着在游戏中,而不是在设备屏幕上,因此更改它实际上不会在设备上移动游戏屏幕。

因此,您可以使用相机位置在游戏中移动和定位相机 例如,响应玩家输入动作:

if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) {
    cam.translate(-3, 0, 0); // Moves the camera to the left.
}
if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) {
    cam.translate(3, 0, 0);  // Moves the camera to the right.
}

正如您所看到的,我们正在根据玩家的输入在游戏中左右移动相机。

但是,您的代码还有一些问题,例如没有设置批量投影矩阵:

batch.setProjectionMatrix(cam.combined);

每帧重置摄像机位置到视口中心:

// Don't run this each frame, it resets the camera position!
cam.position.set(cam.viewportWidth/2,cam.viewportHeight/2, 0);
cam.update(); // <- However, you must run this line each frame.


最后,将LibGDX应用程序集中在设备屏幕上应该在Libgdx之外完成,否则,如果您打算将备用屏幕用于同一个LibGDX应用程序,那么您应该创建另一个相机以全屏工作并在实际游戏之前渲染它相机,通常用于HUD等...