2012-03-27 10 views
5

Zastanawiam się, czy istnieje sposób na tworzenie gier na Androida w libgdx, tak aby wszystkie miały tę samą rozdzielczość 480x800. Używanie Gdx.graphics.setDisplayMode (480, 800, true) nie zmienia niczego. Stworzenie OrthographicCamera 480 na 800 sprawia, że ​​gra jest 480 na 800, ale nie powiększa się do pełnego ekranu i zajmuje cały ekran, tak jak się spodziewałem. Kiedy testowałem to na moim telefonie, telefon używał pustego miejsca, aby wypełnić resztę ekranu podczas gry w rozdzielczości 480x800. Oto kod, którego używam.Rozdzielczość pełnoekranowa w systemie Android dla gier 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; 
} 

Z góry dziękuję.

Odpowiedz

10

Ustawiłeś glViewport na 480x800, co oznacza, że ​​pytasz sprzęt telefonu o okno o wymiarach 480x800, które chcesz narysować. Ponieważ większość (wszystkich?) Urządzeń telefonicznych nie wykonuje skalowania ekranu (tak jak robi to twój monitor biurkowy), daje po prostu obszar 480x800 na ekranie.

Musisz uzyskać OpenGL, aby "powiększyć" ekran, i robisz to ustawiając glViewport() na fizyczną rozdzielczość twojego urządzenia (warianty współczynnika proporcji modulo!). Powinieneś pozostawić aparat w preferowanej rozdzielczości wirtualnej (w tym przypadku 480x800). Teraz OpenGL przeskaluje wszystkie twoje prymitywy do rozdzielczości ekranu.

Jako szybki test, spróbuj tego:

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

Kolejnym problemem jest to, że jeśli proporcje sprzętu nie pasuje do „wirtualnej” proporcje. W takim przypadku musisz zdecydować między rozciąganiem, pozostawieniem czarnych pasków po jednej stronie lub zmianą współczynnika kształtu wirtualnego. Zobacz ten wpis na blogu, aby uzyskać więcej informacji na temat konfiguracji aparatu/rzutni oraz kilka rozwiązań problemu z proporcjami obrazu: http://blog.acamara.es/2012/02/05/keep-screen-aspect-ratio-with-different-resolutions-using-libgdx/

+0

Dziękuję, to było naprawdę pomocne. – MasterBirdy