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: Bildbeispiel 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);
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow