Frage von gut4fr5g4, 21

LibGDX Android Scale des Spiels?

Wie kann ich in LibGDX für Android ein Spiel bzw eine Anwendung auf die maße des handys skallieren, weil sonst müsste ich ja für jede maße ein neues programm machen.

Also wenn das Game z.B fullHD ist, wie kann ich dass dann auf z.B hd runterskallieren, denn ich habe eine fullHD LibGDX anwendung und will die fürs handy haben, wie kann ich die dann runterskallieren, wäre echt geil, wenn jemand hilft

LG

Antwort
von Springrbua, 10

In LibGDx gibt es dafür die Cameras, bzw. die Viewports. Diese bestimmen, wie deine "World-Koordinaten" auf die "Screencoordinates" projeziert werden.

Deine gesamte Gamelogik verwendet dabei deine World-Koordinaten, welche z.B. Meter sein können. Über die Viewports werden die Meter dann in Pixel umgerechnet.

Dabei gibt es verschiedene Arten von Viewports (nachzulesen im Wiki), welche das Ganze unterschiedlich behandeln. So z.B. wandelt der FitViewport deine Meter in Pixel um, wobei unterschiedliche Bildschirmformate (4:3, 16:9 etc.) zu schwarzen Balken an den Rändern führen. Der StretchViewport hingegen vermeidet diese schwarzen Balken, indem er die jeweilige Achse streckt, was u.U. zu komisch gestreckten Bildern führt.

Um die World-koordinaten besser verstehen zu können kannst du folgendes machen:

- Nimm z.B. einen Hauptcharakter deines Games und stell ihn dir im  realen Leben vor. Wie groß wäre er? Als Beispiel nehmen wir einen 2m großen Mann.

- Nun stell dir vor, wie viel Platz er auf dem Bildschirm in der Höhe einnehmen soll. Als Beispiel sagen wir, der Mann sollte ca. 1/10 von der Bildschirmhöhe einnehmen. Somit wissen wir, unser Bildschirm ist 20m (in World-Koordinaten) hoch.

- Anschließend solltest du dir über das gewünschte Bildschirmformat Gedanken machen. Bei Notebooks und PCs ist derzeit wohl 16:9 das häufigste, weshalb ich als Beispiel hier dieses verwenden möchte. Somit ergibt sich eine Bildschirmbreite von ca. 36m.

Daraus ergibt sich also folgender Viewport: 

new FitViewport(36, 20, camera);

Anschließend verwendest du immer die "camera" um zu rendern. Zudem musst du in der "resize"-Methode den Viewport aktualisieren (viewport.update(width, height)).

Die Vorteile dieser Methode:

- Dein Game funktioniert mit kleinen Einschränkungen (schwarze Balken/streckung) mit allen Auflösungen.

- Deine Gamelogik kann mit der von dir gewünschten Einheit arbeiten (z.B. Meter), wodurch vieles leichter fällt. Charaktere sind z.B. 2m hoch, Autos bewegen sich mit 25m/s u.s.w.

LG

Kommentar von gut4fr5g4 ,

Kannst du ein Beispiel geben? Also ein Codebeispiel?

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten