Полноэкранное разрешение на Android для игр libgdx

Мне было интересно, есть ли способ делать игры для Android в libgdx, чтобы все они имели одинаковое разрешение 480x800. Использование Gdx.graphics.setDisplayMode(480, 800, true) ничего не меняет. Создание OrthographicCamera размером 480 на 800 делает игру размером 480 на 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;
}

Заранее спасибо.


person MasterBirdy    schedule 27.03.2012    source источник


Ответы (1)


Вы установили 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-отношение-с-разным-разрешением-использованием-libgdx/

person P.T.    schedule 28.03.2012
comment
Спасибо, это было действительно полезно. - person MasterBirdy; 29.03.2012