Java Gaming ist kein Mythos!

Unerklärlicherweise wird Java immer noch als nicht geeignet für die Spieleentwicklung wahrgenommen, während gleichzeitig

  • Android Java Games einen Markt von mehreren Milliarden Dollar ausmachen,
  • C# die Hauptsprache für die Unity-Engine ist,
  • die Unreal Engine jahrelang uScript benutzt hat.

Java is very similar to UnrealScript, and is an excellent language to learn about due to its clean and simple approach. https://udn.epicgames.com/Three/UnrealScriptReference.html

Tatsächlich ist es problemlos möglich, in Java moderne 3D Anwendungen zu entwickeln.

Screenshot aus dem Spiel

Screenshot aus dem Spiel “Mythruna”

Java wird derzeit bereits oft von MMO Servern benutzt, wo sich tausende Spieler auf derselben Maschine befinden. Von Vorteil sind hierbei die hohe Zuverlässigkeit der JVM und das plattformübergreifend konsistente Verhalten.

Dass die JVM erheblich mehr RAM belegt als vergleichbarer C-Code ist heutzutage ebenfalls ein selten relevantes Problem, da bei einem typischen Spiel die Texturen und Sounds weit mehr als 90% am gesamten Speicherverbrauch ausmachen.

Die klassischen Probleme von Java sind inzwischen ebenfalls oft behoben.

  • Mithilfe von DirectBuffern ist es möglich, direkt bis zu den Grafiktreibern Speicherbereiche durchzureichen und low-level Manipulationen an ihnen vorzunehmen.
  • Durch den neueren G1-Collector ist es zudem möglich, die Collection-Pausen innerhalb von einem definierten Zeitfenster zu halten, und somit jittern vorzubeugen.

Grundsätzlich ist es natürlich dennoch empfehlenswert, in inneren Loops nur sehr kurzlebige Objekt oder sehr langlebige Objekte zu erzeugen. Erstere können sehr effizient von dem JIT-Compiler optimiert werden (z.B. via Escape Analysis). Letztere hingegen verursachen nur bei Full Collections Aufwand, und diese sollten sehr selten vorkommen.


(Showcase der Java Game Engine jME3)

Entgegen von vielen normalen Java Empfehlungen, kann es sich für Spiele lohnen, explizit ein System.gc() auszuführen, sofern es Stellen gibt, bei denen eine kurze Pause nicht wahrgenommen wird. Es bieten sich hierfür natürliche Übergänge an, z. B. Szenenwechsel, Öffnen des Hauptmenüs usw. Durch diese manuellen Collections kann sichergestellt werden, dass es innerhalb des normalen Spielverlaufes sehr unwahrscheinlich ist, eine Full-Collection zu anzustoßen.

Java bietet eine reichhaltige Landschaft, mit der es einfach ist, die verschiedensten Libraries miteinander zu verbinden und darauf aufbauend ein Spiel zu schreiben.

Abschließend einige interessante Libraries für den schnelleren Einstieg:

Lwjgl – Ein Wrapper um OpenGL, OpenCL & OpenAL, sowie einige weitere low-level C APIs für z. B. Gamepads.

JmonkeyEngine – Eine moderne Shader-basierte 3D-Engine, die Networking, Physics und mehr bietet.

libGDX – Eine Grafikengine, die insbesondere auf gute Portabilität entwickelt wurde und auch auf IOS sowie in HTML5 deployen kann.

Short URL for this post: http://wp.me/p4nxik-2t7
This entry was posted in Did you know? and tagged , , . Bookmark the permalink.

Leave a Reply