libgdx
Obsługa wielu rozdzielczości
Szukaj…
Rzutnie
Aby obsługiwać wiele rozdzielczości i współczynników proporcji, Libgdx wykorzystuje tak zwane Viewports
.
Istnieje kilka rodzajów Viewports
które wykorzystują różne strategie do obsługi wielu rozdzielczości i współczynników proporcji.
Viewport
używa Camera
pod maską i zarządza jej viewportHeight
i viewportWidth
. Opcjonalnie możesz nadać Viewport
Camera
w jej konstruktorze, w przeciwnym razie domyślnie użyje Camera
OrthographicCamera
:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new PerspectiveCamera();
viewport = new FitViewport(8f, 4.8f, camera);
}
Ponadto należy podać konstruktor rzutni worldWidth
i worldHeight
. Ta przestrzeń będzie reprezentować wirtualny układ współrzędnych, którego użyjesz do określania położenia obiektów i ich rozmiarów. Transformacja rzutni, którą można na przykład zastosować do SpriteBatch, automatycznie zajmie się transformacją współrzędnych logicznych na rzeczywiste współrzędne ekranu, w sposób zgodny z rzeczywistym typem używanej rzutni. Na przykład, gdy używasz projekcji ortograficznej (domyślna kamera OrthographicCamera
): jeśli Twój świat ma rozmiar 12,8 na 7,8 metra, a ekran Twojego urządzenia ma 2560 x 1560 pikseli, wówczas Twój świat będzie dynamicznie wyświetlany z 200 pikselami na metr.
Kiedy zmienia się rozmiar Viewport
(na przykład jeśli zmienia się orientacja ekranu smartfona), musisz poinformować Viewport
o tej zmianie. następnie automatycznie zaktualizuje viewportHeight
Camera
viewportHeight
i viewportWidth
:
public void resize(int width, int height) {
viewport.update(width, height);
}
Viewport
y także zarządzać OpenGL Viewport
i modyfikować obszar rozciągliwej, ile potrzeba.
Viewport
zajmują się także konwertowaniem współrzędnych ekranu na współrzędne gry, co jest szczególnie potrzebne do wybierania:
private Vector2 worldPos = new Vector2();
public boolean touchDown (int x, int y, int pointer, int button) {
worldPos.set(x, y);
viewport.unproject(worldPos);
processPicking(worldPos);
}
Wbudowane rzutnie
Istnieje kilka wbudowanych rzutni, z których każda robi różne rzeczy. Oto lista nazwisk i ich opisów:
Nazwa rzutni | Opis |
---|---|
StretchViewport | Rozciągnie ekran. Brak czarnych pasków, ale proporcje mogą być wyłączone. |
FitViewport | Maksymalizuje jego rozmiar na podstawie proporcji. Może mieć czarne paski. |
FillViewport | Zupełnie to samo co FitVieport, ale zawsze wypełnia cały ekran. |
ScreenViewport | Zawsze wypełnia cały ekran, ale nie zmienia rozmiaru żadnych dzieci. |
ExtendedViewport | Utrzymuje światowy współczynnik kształtu bez czarnych pasów, przedłużając świat w jednym kierunku |
CustomViewport | Własnie zaprogramowana rzutnia. Może mieć czarne pasy i może zachować proporcje. |
Niestandardowe rzutnie
Możesz stworzyć własną niestandardową rzutnię. Może mieć czarne pasy i może, ale nie musi utrzymywać współczynnika kształtu, w zależności od tego, jak go zaprogramujesz. Niestandardowa rzutnia wyglądałaby mniej więcej tak:
public class Tutorial extends Viewport
. Musisz zastąpić update(width, height)
, ale to wszystko.
Inną próbą byłoby rozszerzenie ogólnego ScalingViewport
i dostarczenie innego skalowania, które nie jest jeszcze dostarczone. Załóżmy, że ustawiłeś Scaling.none
. To mogłoby wyglądać mniej więcej tak: Jeśli potrzebujesz trochę informacji, możesz znaleźć wbudowane klasy rzutni tutaj .
StretchViewport
StretchViewport
jest typem Viewport
, który obsługuje wirtualny rozmiar ekranu.
Umożliwia to zdefiniowanie stałej szerokości i wysokości (niezależnie od rozdzielczości).
StretchViewport
, jak sama nazwa wskazuje, rozciąga wirtualny ekran, jeśli wirtualny współczynnik proporcji nie odpowiada rzeczywistemu współczynnikowi proporcji. Rzutnia OpenGL nie zostanie zmodyfikowana i nie pojawią się czarne pasy.
Stosowanie:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new OrthographicCamera();
viewport = new StretchViewport(80, 48, camera);
}
public void resize(int width, int height) {
viewport.update(width, height);
}
FitViewport
FitViewports to rzutnie, które zawsze zachowują proporcje. Odbywa się to poprzez tworzenie czarnych pasków na krawędziach, gdzie pozostało miejsce. Jest to jedna z najczęściej używanych rzutni.
Stosowanie:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new OrthographicCamera();
viewport = new FitViewport(80, 48, camera);
}
public void resize(int width, int height) {
viewport.update(width, height);
}