2012-03-27 21 views
5

Mi chiedevo se esistesse un modo per realizzare giochi Android in libgdx in modo che tutti condividessero la stessa risoluzione di 480x800. L'utilizzo di Gdx.graphics.setDisplayMode (480, 800, true) non sembra cambiare nulla. Creare una OrthographicCamera di 480 x 800 rende il gioco 480 per 800, ma non ingrandisce a schermo intero e occupa l'intero schermo come mi aspettavo. Quando l'ho provato sul mio telefono, il telefono ha usato lo spazio vuoto per riempire il resto dello schermo mentre il gioco era in risoluzione 480x800. Ecco il codice che sto usando.Risoluzione fullscreen su Android per i giochi 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; 
} 

Grazie in anticipo.

risposta

10

Hai impostato il tuo glViewport su 480x800, il che significa che stai chiedendo all'hardware del telefono di utilizzare una finestra 480x800. Poiché la maggior parte (tutto?) L'hardware del telefono non esegue il ridimensionamento dello schermo (come fa il monitor del desktop), ti danno solo un'area 480x800 sullo schermo.

È necessario ottenere OpenGL per "ingrandire" lo schermo, e lo si fa impostando glViewport() sulla risoluzione fisica del dispositivo (caveat proporzioni modulo!). Dovresti lasciare la fotocamera alla risoluzione "virtuale" che preferisci (quindi 480x800 in questo caso). Ora OpenGL ridimensiona tutte le tue primitive fino alla risoluzione dello schermo.

Come una prova rapida, provate questo:

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

Il problema successivo è che se il rapporto di aspetto hardware non corrisponde il vostro rapporto di 'virtuale' aspetto. In tal caso è necessario decidere tra lo stretching, lasciando le barre nere su un lato o modificando le proporzioni virtuali. Vedere questo post sul blog per ulteriori dettagli sulla configurazione della telecamera/viewport e alcune soluzioni al problema di proporzioni: http://blog.acamara.es/2012/02/05/keep-screen-aspect-ratio-with-different-resolutions-using-libgdx/

+0

Grazie, questo è stato davvero utile. – MasterBirdy