# LibGDX

libGDX ist ein Java-Framework für plattformunabhängige Spieleentwicklung. Die Programmbibliothek erlaubt es, das gleiche Projekt auf Windows, Linux, macOS, Android, iOS und im Webbrowser auszuführen. libGDX wurde von Mario Zechner erschaffen und auf GitHub als Open-Source-Software unter Verwendung der Apache-2.0-Lizenz freigegeben. Der Name libGDX hat laut Mario Zechner keine bestimmte Bedeutung, wird aber von der Community beispielsweise als „Library for Game Development - Xtreme“ bezeichnet.

## Geschichte
### 2009

libGDX entstand im Jahr 2009 als privates Android-Framework-Projekt von Mario Zechner unter dem Namen AFX (Android Effects). Der erste Schritt zur Plattformunabhängigkeit ist auf die Art und Weise zurückzuführen, wie Android-Applikationen entwickelt werden. Im Normalfall wird ein Android-Endgerät für Debugging verwendet. Ist solch ein Tablet oder Smartphone nicht verfügbar, wird ein Emulator verwendet. Um die Applikationen nativ auf Desktop testen zu können, wurde der Kern in ein eigenständiges Projekt ohne Android-Bezug abstrahiert.

### 2010

Am 6. März 2010 wurde libGDX auf Google Code als Open-Source-Projekt veröffentlicht. In dieser Zeit wurde der bestehende Code versioniert, Tutorials verfasst, das Forum eröffnet, die Lizenz auf Apache 2.0 geändert, das Buch „Beginning Android Games“ begonnen, und das erste Spiel, welches auf libGDX basiert, veröffentlicht. Ende des Jahres 2010 ist die Version 0.9 der Library fast fertig geworden.

### 2011

In diesem Jahr haben viele weitere Unterstützer begonnen, bei libGDX mitzuarbeiten. Mario Zechner hat im Februar sein Buch „Beginning Android Games“ veröffentlicht und hat die ersten Präsentationen über sein Spieleentwicklungs-Framework gehalten. Im September wurde Version 0.9.2 veröffentlicht.

### 2012

2012 wurde libGDX von Google Code auf GitHub migriert und Maven integriert. Außerdem, inspiriert von Googles PlayN, wurde der Web-Support in libGDX eingebaut, damit die Applikation auch im Webbrowser verfügbar ist. Durch Michael Bayne wurde mittels IKVM der Java-Code in .Net-Framework-Byte-Code übersetzt und dieser schließlich in nativen Code für iOS. Ende des Jahres wurden die ersten libGDX Spiele Tropical Stormfront und Desert Stormfront von Noblemaster Games im iOS-App-Store veröffentlicht. libGDX erreichte die Version 0.9.7 in diesem Jahr.

### 2013

2013 ist Support für Ouya in libGDX implementiert worden. In diesem Jahr ist die Unterstützung für iOS auf RoboVM umgestellt worden. Außerdem wurde die 3D-Programmierschnittstelle von Xoppa und Bach komplett überarbeitet und mit Autodesk FBX Datei-Unterstützung erweitert. Die Entwicklung der Java-Projekte wurde auf das Build-Management-Automatisierungs-Tool Gradle umgestellt und libGDX in der Maven Zentrale veröffentlicht. Im November wurde die Version 0.9.9 von libGDX freigegeben.

### 2014

Nach vier Jahren Entwicklung wurde die Version 1.0 veröffentlicht.

## Architektur und Projektstruktur

libGDX erlaubt ein Projekt mit demselben Code auf unterschiedlichen Plattformen als plattformunabhängiges Programm auszuführen. Die Abstraktion ermöglicht, dass Plattform-spezifischer Code außerhalb des Entwicklungskernes bleibt. Die Struktur trennt das Kernprojekt in den Ordner „core“ und erstellt für jede Plattform ein eigenes Unterprojekt wie beispielsweise „desktop“, „android“, oder „html“. In den Unterprojekten werden einzelne Starter-Klassen angelegt, welche eine neue Instanz des Kernprojektes erstellen und die notwendigen Unterstützungen für die jeweiligen Plattformen bereitstellen. Somit kann neben dem gemeinsamen Code im Kernprojekt auch plattformspezifischer Code in den Unterprojekten angelegt und instanziiert werden.

### Leeres Projekt

Ein neues Projekt wird anhand eines Java-Programmes erzeugt. Dieses bietet ein Benutzerinterface, in welchem die gewünschten Plattformen und zusätzliche Programmbibliotheken ausgewählt werden können. Als Beispiel sieht die Ordnerstruktur eines leeren Projektes mit Desktop- und Android-Plattform wie folgt aus:
Das Projekt kann mit einer beliebigen Entwicklungsumgebung verwaltet werden, wie beispielsweise Eclipse, IntelliJ, oder NetBeans mit etwaigen Plugins für Gradle-Unterstützung. Die Applikation wird dann über die plattformspezifischen Unterprojekte ausgeführt.

## Anwendungen mit libGDX

Im Android-Bereich hat libGDX einen gesamten Marktanteil von 1,69 %, unter Top-Apps einen von 3,26 %, und unter neuen Apps einen von 1,95 % (Stand: 5. Juni 2015). Außerdem ist das Framework auf Platz #3 unter den Top-Spiele-Frameworks für Android-Apps.

### Spiele

Vertreter für Spiele, die libGDX als Framework verwenden, sind beispielsweise Ingress, Halfway, Alchemist's Awakening, Delver, Grandpa's Table, Gunslugs 2 und Nubs' Adventure.

## Third-party-libraries

libGDX benutzt mehrere Programmbibliotheken um die benötigte Funktionalität anzubieten. Dazu gehören nothings.org, OpenGL, FreeType, Mpg123, xiph.org, soundtouch, box2d, LWJGL, OpenAL, und KissFFT.