安卓平台上libgdx游戏的全屏分辨率

6
我想知道是否有一种方法可以在libgdx中创建Android游戏,使它们都共享480x800的相同分辨率。使用Gdx.graphics.setDisplayMode(480, 800, true)似乎没有改变任何内容。创建一个480x800的正交摄像机可以使游戏成为480 x 800,但不会像我预期的那样缩放到全屏并占据整个屏幕。当我在手机上测试时,手机只是用空白填充其余屏幕,而游戏以480x800分辨率运行。以下是我正在使用的代码。
public class GameScreen implements Screen {

private Game game;
private OrthographicCamera guiCam;
private SpriteBatch batch;
private Texture texture;
private Rectangle glViewport;

public GameScreen (Game game)
{
        this.game = game;
        guiCam = new OrthographicCamera(GAME_WIDTH, GAME_HEIGHT);
        guiCam.position.set(GAME_WIDTH / 2, GAME_HEIGHT / 2, 0);
        batch = new SpriteBatch();
        texture = new Texture(Gdx.files.internal("data/c2.png"));
        glViewport = new Rectangle(0, 0, GAME_WIDTH, GAME_HEIGHT);
}

@Override
public void render(float delta) {
    if (Gdx.input.justTouched()) {
          texture = new Texture(Gdx.files.internal("data/c1.png"));
    }
    GL10 gl = Gdx.graphics.getGL10();
    gl.glClearColor(1, 0, 0, 1);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    gl.glViewport((int) glViewport.x, (int) glViewport.y,
            (int) glViewport.width, (int) glViewport.height);

    guiCam.update();
    guiCam.apply(gl);
    batch.setProjectionMatrix(guiCam.combined);
    batch.begin();
    batch.draw(texture, 0, 0, 0, 0, 142, 192);
    batch.end();
}

private static final int GAME_WIDTH = 480;
private static final int GAME_HEIGHT = 800;
}

感谢您的提前帮助。
1个回答

11

你已将 glViewport 设置为 480x800,这意味着你要求手机硬件提供一个 480x800 的窗口进行绘制。因为大多数(全部?)手机硬件不会执行屏幕缩放(像你的桌面监视器一样),它们只给你屏幕上的 480x800 区域。

你需要让 OpenGL 对屏幕进行“缩放”,方法是将 glViewport() 设置为设备的物理分辨率(除了长宽比警告!)。在这种情况下,应该将相机保留在您喜欢的“虚拟”分辨率上(即 480x800)。现在 OpenGL 将缩放所有图元以适应屏幕分辨率。

作为快速测试,可以尝试以下操作:

gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
下一个问题是,如果硬件的纵横比不匹配你的“虚拟”纵横比。在这种情况下,你需要在拉伸、留下黑边或更改虚拟纵横比之间做出决定。有关摄像机/视口设置的更多详细信息以及解决纵横比问题的一些解决方案,请参见此博客文章:http://blog.acamara.es/2012/02/05/keep-screen-aspect-ratio-with-different-resolutions-using-libgdx/

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