×

(Android) Spiele entwickeln mit libGDX

(Android) Spiele entwickeln mit libGDX

Wer heutzutage Spiele für mobile Geräte oder auch als Desktop-Anwendung entwickeln möchte, kommt um Spiele-Engines wie Unity oder Unreal Engine (https://eckcellent-it.de/2024/03/11/spieleentwicklung-unreal-engine5/) nicht herum. Allerdings verbergen diese Engines viel von dem, was die Spiele ausmacht, vor den Entwicklern und Entwicklerinnen. Das hat Vor- und Nachteile. So müssen sich die, die das Spiel entwickeln, mit vielen Dingen nicht mehr auseinandersetzen. Vielleicht ist es aber grade dieses Detailwissen, das einen guten Entwickler oder eine gute Entwicklerin auszeichnet.

Was ist libGDX?
libGDX ist eine Open-Source-Bibliothek, die es ermöglicht, OpenGL-Spiele und -Anwendungen plattformübergreifend in Java zu entwickeln. Der Ansatz dieser Bibliothek ist ein anderer als der von Spiele-Engines, in denen die Entwicklung in einem speziellen Editor erfolgt. libGDX ist ein Wrapper für LWJGL – also OpenGL (ES) in Java. Das bedeutet, dass einem selbst viel Arbeit abgenommen wird, wenn es um den Umgang mit OpenGL geht. Die grundlegende Spielmechanik muss man allerdings selbst programmieren. Dafür hat man aber auch sehr viel Kontrolle darüber, was das eigene Programm macht.

Der größte Reiz von libGDX ist sicherlich die Möglichkeit, auf einfache Art und Weise Spiele zu entwickeln, die auf den unterschiedlichsten mobilen Geräten laufen. Man schreibt seine Programmlogik nur einmal und kann dann Anwendungen für Windows, Linux, macOS, Android, iOS und auch Webbrowsern erzeugen, ohne für jede Plattform tiefggreifende Kenntnisse mitbringen zu müssen.

Ein weiterer Vorteil von libGDX ist die Größe des erzeugten Artefakts. Ein kleines Spiel mit nur wenigen Grafiken ist weniger als 5 Megabyte groß und kann auf vielen (auch älteren) Mobilgeräten verwendet werden. Große Spiele-Engines müssen einfach viel mehr Fälle abdecken und erzeugen Artefakte, die meist um ein Vielfaches größer sind.

Die Entwicklung mit libGDX
Für libGDX gibt es einen Starter GDX-Liftoff, wie man ihn auch von z.B. Spring Boot kennt. Mit diesem kann man die grundlegenden Einstellungen für das Projekt festlegen – für welche Plattformen man entwickeln will, wie die Packages und Klassen heißen sollen, welche Erweiterungen verwendet werden sollen.

Liftoff erzeugt dann eine Projektstruktur, die man dann in der IDE seiner Wahl öffnen kann. Das Projekt besteht aus mehreren Unterprojekten: Eines für jede Plattform, die bei der Generierung ausgewählt wurde, und einem Core-Projekt.

Das Core-Projekt hat eine besondere Bedeutung. Hier wird die Logik der Applikation definiert. Der Starter hat bereits eine Klasse vorbereitet, die als Einstiegspunkt dient. Von hier aus kann alles weitere aufgebaut werden.

Die plattformspezifischen Unterprojekte enthalten jeweils alles, was benötigt wird, um die Anwendung auf der entsprechenden Umgebung zu starten. Für Android-Projekte sind dies z.B. Manifest-Dateien und eine Klasse, die die generierte Start-Klasse aus dem Core-Projekt lädt. Das Projekt kann dann direkt in Android Studio geladen und ausgeführt werden, um das Ergebnis im Emulator oder auf dem Mobiltelefon zu sehen.

Neben dem Core- und den Plattformverzeichnissen wird auch das Assets-Verzeichnis erzeugt. Dieses wird in alle anderen Unterprojekte eingebunden und enthält alle externen Dateien, die für die Anwendung benötigt werden: Grafiken, Musik und Konfigurationsdateien können hier abgelegt werden.

(Android) Spiele entwickeln mit libGDX
(Android) Spiele entwickeln mit libGDX

Der Gameloop
Die generierte Start-Klasse im Core-Projekt stellt einem die Struktur für die eigene Anwendung zur Verfügung, nämlich drei Methoden, die mit Leben gefüllt werden müssen.
create() und dispose() dienen dem Ressourcenmanagement. Da libGDX auf OpenGL aufbaut, muss man sich als Java-Entwickler oder Entwicklerin daran gewöhnen, dass Hardware-Ressourcen zugewiesen und diese auch wieder freigegeben werden müssen.

Die letzte Methode render() ist dann der Ort, wo man alles machen kann, was das Spiel machen soll. Diese Funktion wird von libGDX immer dann aufgerufen, wenn die Anwendung einen weiteren Frame auf dem Bildschirm darstellen soll. Das ist also der Ort, an dem die gesamte Grafikausgabe erzeugt werden muss – aber nicht nur das: Hier müssen auch alle Objekte aktualisiert werden, die das Spiel spannend machen, also z.B. Spielerfiguren, Gegner, Schüsse, Animationen usw. Damit ist auch schon die Grundstruktur einer libGDX-Anwendung beschrieben: Initialisierung – Gameloop – Aufräumen.

(Android) Spiele entwickeln mit libGDX

Was bietet libGDX zur Unterstützung?
An dieser Stelle muss man sich anschauen, was libGDX einem alles anbietet, um das eigene Spiel Wirklichkeit werden zu lassen.

Das Wichtigste für 2D Spiele sind Sprites. Das sind rechteckige Bilder (auch transparent), die eine Position, Rotation und Skalierung haben. Sprites kann man dann über den Bildschirm flitzen lassen und so Spielelemente animieren, oder sie als Spielsteine in Brettspielen verwenden. Die Unterstützung geht dann weiter mit Spritesheets, in denen die Grafiken der Sprites gespeichert und organisiert werden. Genauso wichtig wie die Darstellung, ist auch der Umgang mit den Benutzereingaben. Ob Maus, Tastatur oder Controller – irgendwie müssen die Aktionen des Benutzers angenommen und verarbeitet werden. libGDX unterstützt hier z.B. auch virtuelle Controller, die auf dem Bildschirm eingeblendet werden, wie man sie von Mobilgeräten kennt.

Und kein Spiel kommt ohne guten Sound aus. Sei es Musik oder Effekte, die abgespielt werden sollen. Die Medien werden in den Assets-Ordner kopiert und können dann einfach im Programm abgespielt werden.

(Android) Spiele entwickeln mit libGDX

Fazit
Mit libGDX kann man vom Prototypen bis zum komplexen Spiel alles entwickeln, was man sich nur vorstellen kann. Wer sich lieber durch seine eigenen Quelltextdateien wühlt, anstatt die Eigenschaften von Komponenten in kleinen Fenstern einzustellen, und sich damit wohler fühlt, ist bei libGDX gut aufgehoben. Natürlich machen es Unity & Co auch Nicht-Programmierern leicht, Spiele zusammenzubasteln und damit schnell zu einem Ergebnis zu kommen. libGDX ist da eher etwas für solche Programmiererinnen und Programmierer, die keine Lust haben, sich in die kleinsten Details der jeweiligen Spiele-Engines einzuarbeiten und stattdessen einfach in ihrer gewohnten Umgebung ein bisschen Spaß haben wollen.

(Android) Spiele entwickeln mit libGDX
Von Felix Funke | 28.01.2025
Felix Funke

Softwareentwicklung