2012-03-27 36 views
5

Me preguntaba si había una forma de hacer juegos de Android en libgdx para que todos compartan la misma resolución de 480x800. El uso de Gdx.graphics.setDisplayMode (480, 800, true) no parece cambiar nada. La creación de una imagen ortográfica de 480 por 800 hace que el juego sea de 480 por 800, pero no se amplía a pantalla completa y ocupa toda la pantalla como esperaba. Cuando lo probé en mi teléfono, el teléfono simplemente usó espacio en blanco para llenar el resto de la pantalla mientras el juego tenía una resolución de 480x800. Aquí está el código que estoy usando.Resolución de pantalla completa en Android para juegos 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; 
} 

Gracias de antemano.

Respuesta

10

Has configurado tu glViewport en 480x800, lo que significa que estás pidiendo al hardware del teléfono una ventana de 480x800. Debido a que la mayoría (¿todo?) Del hardware del teléfono no hace escala en la pantalla (como hace su monitor de escritorio), simplemente le dan un área de 480x800 en la pantalla.

Necesita abrir OpenGL para "acercar" la pantalla, y lo hace al configurar el glViewport() a la resolución física de su dispositivo (¡advertencias de relación de aspecto de módulo!). Debe dejar la cámara en la resolución 'virtual' que prefiera (así que 480x800 en este caso). Ahora OpenGL escalará todas sus primitivas hasta la resolución de la pantalla.

Como una prueba rápida, intente esto:

gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

El siguiente problema es que si la relación de aspecto de hardware no coincide con la relación de aspecto 'virtual'. En ese caso, debe decidir entre estiramiento, dejar barras negras en un lado o cambiar su relación de aspecto virtual. Consulte esta publicación en el blog para obtener más detalles sobre la configuración de la cámara/puerto de visualización y algunas soluciones para el problema de relación de aspecto: http://blog.acamara.es/2012/02/05/keep-screen-aspect-ratio-with-different-resolutions-using-libgdx/

+0

Gracias, esto fue realmente útil. – MasterBirdy

Cuestiones relacionadas