2012-03-27 5 views
5

Ich fragte mich, ob es eine Möglichkeit gab, Android-Spiele in libgdx zu machen, so dass sie alle die gleiche Auflösung von 480x800 teilen. Die Verwendung von Gdx.graphics.setDisplayMode (480, 800, true) scheint nichts zu ändern. Das Erstellen einer OrthographicCamera von 480 mal 800 macht es so, dass das Spiel 480 mal 800 ist, zoomt aber nicht in den Vollbildmodus und nimmt den gesamten Bildschirm auf, wie ich es erwartet hätte. Als ich es auf meinem Telefon ausprobierte, nutzte das Telefon nur Leerraum, um den Rest des Bildschirms während des Spiels in 480x800 Auflösung zu füllen. Hier ist der Code, den ich verwende.Fullscreen-Auflösung auf Android für libgdx Spiele

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

Vielen Dank im Voraus.

Antwort

10

Sie haben Ihren glViewport auf 480x800 eingestellt, dh Sie fragen die Telefonhardware nach einem 480x800-Fenster. Da die meisten (alle?) Telefon-Hardware keine Bildschirmskalierung durchführt (wie es bei Ihrem Desktop-Monitor der Fall ist), erhalten Sie nur einen 480x800-Bereich auf dem Bildschirm.

Sie müssen OpenGL erhalten, um Ihren Bildschirm zu "zoomen", und Sie tun dies, indem Sie den glViewport() auf die physikalische Auflösung Ihres Geräts einstellen (Modulo-Seitenverhältnis-Vorbehalte!). Sie sollten die Kamera in der von Ihnen bevorzugten "virtuellen" Auflösung belassen (in diesem Fall also 480x800). Jetzt wird OpenGL alle Ihre Primitiven bis zur Bildschirmauflösung skalieren.

Als Schnelltest, versuchen Sie dies:

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

Das nächste Problem, dass, wenn das Hardware-Seitenverhältnis hat Du nicht ‚virtuelles‘ Seitenverhältnis entspricht. In diesem Fall müssen Sie sich entscheiden zwischen Stretching, schwarzen Balken auf der einen Seite oder dem Ändern des virtuellen Seitenverhältnisses. In diesem Blogbeitrag finden Sie weitere Details zum Setup der Kamera/des Ansichtsfensters und einige Lösungen für das Problem des Seitenverhältnisses: http://blog.acamara.es/2012/02/05/keep-screen-aspect-ratio-with-different-resolutions-using-libgdx/

+0

Vielen Dank, das war wirklich hilfreich. – MasterBirdy