2012-03-27 2 views
5

Мне было интересно, есть ли способ сделать Android-игры в libgdx, чтобы все они имели одинаковое разрешение 480x800. Использование Gdx.graphics.setDisplayMode (480, 800, true), похоже, ничего не меняет. Создание OrthographicCamera 480 на 800 делает так, чтобы игра была 480 на 800, но не масштабируется в полноэкранном режиме и занимает весь экран, как я ожидал. Когда я тестировал его на своем телефоне, телефон просто использовал пустое пространство, чтобы заполнить остальную часть экрана, в то время как игра в разрешении 480x800. Вот код, который я использую.Полноэкранное разрешение на Android для игр с libgdx

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; 
} 

Заранее благодарен.

ответ

10

Вы установили свой 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/

+0

Спасибо, это было действительно полезно. – MasterBirdy

Смежные вопросы