Game-Engines

Open Source 2D Game-Engines für Android

Von am 14.04.2014

Wenn man damit anfängt, Spiele für Android zu programmieren, stößt man schon bei den Basiselementen (Bilder, Buttons etc.) schnell an seine Grenzen, und man muss auf eine Game Engine zurückgreifen. Wie man es erwarten kann, ist die Liste der Game Engines sehr lang und die erste Wahl kann einem sehr schwer fallen. Deswegen habe ich einige Kriterien aufgestellt, damit ich die Auswahl eingrenzen kann:

1) Kostenlos

Vor allem wenn man sich noch nicht sicher ist, sollte man auf Kostenloses zurückgreifen, da professionelle Game Engines schon mal ein paar 100 bis 1000 Euro kosten können.

2) Java basiert

Für den Anfang ist es einfacher, in der gleichen Programmiersprache wie bei Android zu bleiben, da so einem viele Probleme erspart werden.

3) Open Source

Eigentlich müsste es nicht direkt Open Source sein, aber ich persönlich bin ein Fan von solchen Projekten, weil bei diesen meistens viele gute Leute dabei sind und oft so nette Addons etc. entstehen.

4) Gute Community / Anleitungen / Dokumentation

Damit man schnell in die Materie hineinkommt ist eine gute Community bzw. Anleitungen und Dokumentationen nie von Nachteil.

Im Grunde kommen so zwei Game Engines heraus, die AndEngine und libGDX. Schauen wir uns diese genauer an.

AndEngine

Die erste interessante Game Engine trägt dem Namen AndEngine und ist direkt für Android entwickelt worden. Sie bietet einen Grundmodul und sehr viele einzelne Erweiterungen an. Hier eine kurze Liste:

  • Augmented Reality
  • Live Wallpaper
  • MOD Player
  • Multiplayer
  • Multi Touch
  • Physics Box2D
  • Robotium
  • Scripting
  • Scripting Generator
  • SVG Texture Region
  • Texture Packer
  • TMX Tiled Map

Sowohl das Grundmodul, als auch die Erweiterungen werden als einzelne Projekte angeboten, die in die IDE (z.B. Eclipse) als Libraries eingebunden werden müssen. Hier muss man jedoch aufpassen, da es mittlerweile drei Branches gibt: GL ES 1, GL ES 2 und GL ES2-AnchorCenter. Vor allem bei den letzten zwei muss man aufpassen, da der einzige Unterscheid ein anderes Koordinatensystem ist und wenn das Basismodul und die Erweiterungen nicht übereinstimmen, kann es zu falschen Positionierungen kommen.

Die Einbindung in Android ist sehr einfach. Sobald man die Libraries eingebunden hat, muss man nur noch die SimpleBaseGameActivity statt der normalen Activity einbinden. Diese bietet die drei Standardfunktionen onCreateEngineOptions() (alle wichtigen Einstellungen z.B. Camera, Ausrichtung etc.), onCreateResources() (hier passiert das Laden aller Ressourcen: Grafiken, Audio etc.) und  onCreateScene() (hier passiert das Rendern) an.

Die Darstellung passiert in sogenannten Scenen. In diesen können dann einzelne Elemente dargestellt werden. Ein Recheck kann dann zum Beispiel mit

final Scene scene = new Scene();
Rectangle firstRect = new Rectangle(pX, pY, 180, 180, this.getVertexBufferObjectManager());
scene.attachChild(rectangleGroup);

dargestellt werden. Wie man sieht, alles ist sehr einfach gehalten.

Links:

libGDX

Einen etwas anderen Weg gehen die Entwickler von libGDX. Dies ist im Grunde eine Cross Plattform Game Engine, die in Java programmiert ist. Bis jetzt werden folgende Plattformen unterstützt:

  • Windows
  • Linux
  • Max OS X
  • Android (+2.2)
  • BlackBerry
  • iOS
  • Java Applet (requires JVM to be installed)
  • Javascript/WebGL (Chrome, Safari, Opera, Firefox, IE via Google Chrome Frame)

Man sieht also, dass man hier einen Vorteil gegenüber von AndEngine hat, jedoch ist das Einrichten und der Einstieg dadurch ein bisschen komplizierter.

libGDX geht so vor, dass man einen Basisprojekt hat, in dem die ganze Programmierung stattfindet und dann gibt es einzelne Projekte für die Endgeräte (z.B. Android und Desktop), die unterschiedlich verlinkt werden müssen und in den unterschiedlichsten Sachen eingestellt werden müssen. Da dies am Anfang sehr verwirrend sein kann, hat AurelienRibon eine grafische Oberfläche programmiert, die einem die ganze Arbeit abnimmt und dann nur noch die Projekte in die IDE eingebunden werden müssen. Man findet sie unter https://github.com/AurelienRibon/gdx-setup-ui.

libGDX geht auch hier einen andren Weg und bietet die ganze Funktionalität nur in einer jar und nicht wie AndEngine bei der verschiedene Erweiterungen einzelne Projekte sind.

Wenn es um das Programmieren eines Spiels geht, sind die zwei Objekte Game und Screen wichtig.

Game ist eine abstrakte Klasse, die in der Hauptkasse implementiert werden muss:

public class myNewGame extends Game {

Diese ist für die ganze Logik des Spiels zuständig. Ähnlich wie bei AndEngine, wo es Scenen gibt, sind es bei libGDX Screens, wo die ganze Darstellung passiert. In diesem Fall ist Screens ein Interface, das eingebunden werden muss.

public class GameScreen implements Screen {

Ein Rechteck kann man dann zum Beispiel mit

shapeRenderer.rect(x, y, width, height);

darstellen.

Links:

Box2D

Für Hardcore-Fans, die gerne alles selber Programmieren, kann ich doch zumindest eine Library empfehlen und zwar Box2D. Bei Box2D handelt es sich um eine Physics Engine, die hauptsächlich zwei Bereiche abdeckt, Collision Detection und Physics, die oft sehr viel Wissen voraussetzen. Die eigentliche Library ist in C++ geschrieben (http://box2d.org/) jedoch gibt es auch einen Java Port, wie zum Beispiel JBox2D (http://www.jbox2d.org/)

Collision

  • Continuous collision detection
  • Contact callbacks: begin, end, pre-solve, post-solve
  • Convex polyons and circles.
  • Multiple shapes per body
  • One-shot contact manifolds
  • Dynamic tree broadphase
  • Efficient pair management
  • Fast broadphase AABB queries
  • Collision groups and categories

Physics

  • Continuous physics with time of impact solver
  • Persistent body-joint-contact graph
  • Island solution and sleep management
  • Contact, friction, and restitution
  • Stable stacking with a linear-time solver
  • Revolute, prismatic, distance, pulley, gear, mouse joint, and other joint types
  • Joint limits, motors, and friction
  • Momentum decoupled position correction
  • Fairly accurate reaction forces/impulses

Die große Herausforderung ist, dass man sich selber um das Rendern kümmern muss.

Links:

The comments are closed.