2013-08-28 8 views
7

Obecnie tworzę grę przy użyciu biblioteki Libgdx, a obecnie mam niewielki problem.Zmiana rozmiaru okna Libgdx: Zachowanie proporcji

Niedawno zablokowałem możliwość zmiany rozmiaru w mojej klasie Main.java w projekcie komputerowym.

LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); 
    cfg.resizable = false; 

Zastanawiam się, czy istnieje prosty sposób na zmianę rozmiaru okna przy zachowaniu proporcji. (Podobnie jak przy zmianie + zmiana rozmiaru)

Jakie są moje opcje? :)

Odpowiedz

2

Funkcja ta nie zapewnia zachowania proporcji ani nawet tego, co myślisz. Po prostu wyłącza możliwość zmiany rozmiaru ekranu w aplikacji komputerowej.

Proszę spojrzeć na wiki libGDX w szczególności na stronę Scene2D. Spójrz na rzeczy ze stołu montażowego Viewport. Wyjaśniono, w jaki sposób zachować współczynnik proporcji z bieżącym libGDX. Istnieją tutoriale, które wyjaśniają inny sposób za pomocą rozdzielczości wirtualnej i metody zmiany rozmiaru ekranu. Jest przestarzały!

z wiki

tym przykładzie wykorzystano również stały rozmiar sceny z „czarnych pasów” na obu boku, tym razem przy użyciu glViewport. Najpierw rozmiar stołu montażowego o wymiarach 800x480 to skalowany w celu dopasowania do rozmiaru ekranu za pomocą klasy Skalowanie. Wynikiem jest używany do konfiguracji glViewport, który zmienia część ekranu OpenGL, która będzie używana. Wreszcie, setViewport jest przekazywany w pozycji rzutni i wielkości. Wynik jest taki sam, jak w ostatnim przykładzie, etap ma "czarne paski", jeśli jest to konieczne, aby zachować proporcje, ale nie można uzyskać rysunku poza obszarem wyświetlania.

public void resize (int width, int height) { 
     Vector2 size = Scaling.fit.apply(800, 480, width, height); 
     int viewportX = (int)(width - size.x)/2; 
     int viewportY = (int)(height - size.y)/2; 
     int viewportWidth = (int)size.x; 
     int viewportHeight = (int)size.y; 
     Gdx.gl.glViewport(viewportX, viewportY, viewportWidth, viewportHeight); 
     stage.setViewport(800, 480, true, viewportX, viewportY, viewportWidth, viewportHeight); 
} 

pozdrowienia