libgdx
Mehrere Auflösungen unterstützen
Suche…
Viewports
Um mehrere Auflösungen und Seitenverhältnisse zu unterstützen, verwendet Libgdx die sogenannten Viewports
.
Es gibt einige Arten von Viewports
die unterschiedliche Strategien verwenden, um mehrere Auflösungen und Seitenverhältnisse zu handhaben.
Ein Viewport
verwendet eine Camera
unter der Haube und verwaltet dessen viewportHeight
und viewportWidth
. Sie können dem Viewport
optional eine Camera
in seinem Konstruktor Viewport
, andernfalls wird standardmäßig eine OrthographicCamera
:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new PerspectiveCamera();
viewport = new FitViewport(8f, 4.8f, camera);
}
Darüber hinaus müssen Sie dem worldWidth
des Ansichtsfensters worldWidth
und worldHeight
angeben. Dieser Raum stellt das virtuelle Koordinatensystem dar, mit dem Sie die Position und Größe der Objekte festlegen. Die Viewport-Umwandlung, die zum Beispiel auf einen SpriteBatch angewendet werden kann, sorgt automatisch für die Umwandlung der logischen Koordinaten in tatsächliche Bildschirmkoordinaten, wobei dies dem von Ihnen verwendeten Viewport-Typ entspricht. Wenn Sie beispielsweise eine orthografische Projektion verwenden ( OrthographicCamera
ist die Standardeinstellung): Wenn Ihre Weltgröße 12,8 x 7,8 Meter beträgt und der Bildschirm Ihres Geräts 2560 x 1560 Pixel beträgt, wird Ihre Welt mit 200 Pixel pro Meter dynamisch projiziert.
Wenn sich die Größe des Viewport
ändert (z. B. wenn sich die Bildschirmausrichtung des Smartphones ändert), müssen Sie den Viewport
über diese Änderung informieren. Der viewportHeight
und viewportWidth
der Camera
werden dann automatisch aktualisiert:
public void resize(int width, int height) {
viewport.update(width, height);
}
Die Viewport
verwalten auch das OpenGL Viewport
und modifizieren den Zeichenbereich nach Bedarf.
Die Viewport
kümmern sich auch darum, Bildschirmkoordinaten in Viewport
umzuwandeln, was insbesondere für die Kommissionierung erforderlich ist:
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);
}
Eingebaute Viewports
Es gibt ein paar eingebaute Ansichtsfenster, die jeweils verschiedene Dinge tun. Hier ist eine Liste der Namen und ihrer Beschreibungen:
Name des Ansichtsfensters | Beschreibung |
---|---|
StretchViewport | Dehnt den Bildschirm aus. Keine schwarzen Balken, aber das Seitenverhältnis ist möglicherweise deaktiviert. |
FitViewport | Maximiert seine Größe basierend auf dem Seitenverhältnis. Könnte schwarze Balken haben. |
FillViewport | Genauso wie ein FitVieport, füllt aber immer den gesamten Bildschirm aus. |
ScreenViewport | Füllt immer den gesamten Bildschirm aus, ändert jedoch keine untergeordneten Elemente. |
ExtendedViewport | Behält das Weltseitenverhältnis ohne schwarze Balken bei, indem die Welt in eine Richtung erweitert wird |
CustomViewport | Ein benutzerdefiniertes programmiertes Ansichtsfenster. Kann schwarze Balken haben und das Seitenverhältnis beibehalten. |
Benutzerdefinierte Ansichtsfenster
Sie können Ihren eigenen benutzerdefinierten Ansichtsbereich erstellen. Möglicherweise enthält der Balken schwarze Balken. Je nach Programmierung kann das Seitenverhältnis beibehalten werden. Ein benutzerdefiniertes Ansichtsfenster würde ungefähr so aussehen:
public class Tutorial extends Viewport
. Sie müssten das update(width, height)
überschreiben, aber das ist es.
Ein weiterer Versuch wäre, den generischen ScalingViewport
zu erweitern und eine andere Skalierung ScalingViewport
, die noch nicht bereitgestellt wird. Nehmen Sie an, Sie setzen es auf Scaling.none
. Das würde ungefähr so aussehen: Wenn Sie eine Referenz benötigen, finden Sie die integrierten Ansichtsfensterklassen hier .
StretchViewport
Der StretchViewport
ist ein Viewport
Typ, der eine virtuelle Bildschirmgröße unterstützt.
Auf diese Weise können Sie eine feste (auflösungsunabhängige) Breite und Höhe definieren.
StretchViewport
der Name schon sagt, streckt der StretchViewport
den virtuellen Bildschirm, wenn das virtuelle Seitenverhältnis nicht mit dem tatsächlichen Seitenverhältnis übereinstimmt. Der OpenGL Viewport wird nicht verändert und es erscheinen keine schwarzen Balken.
Verwendungszweck:
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 sind Ansichtsfenster, die immer das Seitenverhältnis beibehalten. Dazu werden schwarze Balken an den Rändern erstellt, an denen noch Platz ist. Dies ist eines der am häufigsten verwendeten Ansichtsfenster.
Verwendungszweck:
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);
}