Welche Engine würdet ihr benutzen um 2D Games für Android zu programmieren?
Zur Erklärung: ich habe bis jetzt schon sehr viel für Android mit Java in Android Studio programmiert und bin hier nun an die Grenzen des SurfaceViews gestoßen ..... die Performance. Bei meinem letzten Spiel hatte ich nur noch mit Glück um die 25FPS (mit Glück lief die draw() und update() Methode 25mal pro Sekunde durch ... meistens deutlich weniger) und das ist einfach zu wenig. Jetzt meine Frage, wie würdet ihr mir Empfehlen jetzt weiter zu machen ? Soll ich weiter für Android programmieren, aber diesmal mit einer Engine ? Ich habe in absehbarer Zeit nur vor 2D Spiele zu entwickeln. Es wäre schön, wenn ich bei Java bleiben könnte, da ich jetzt schon seit fast 3 Jahren mit Java programmiere. Und jetzt zur eigentlichen Frage: welche Engine würdet ihr mir empfehlen ?
- (am wichtigsten) Es sollte viele Tutorials dazu geben (egal ob auf Deutsch oder Englisch)
- Ich würde gerne bei Java bleiben
- die Engine sollte kostenlos benutzbar sein und man sollte auch Apps ohne weitere kosten mit dieser Engine veröffentlichen können
- (optimal) wäre wenn die Engine keine Werbung ins Spiel für sich einbaut
- (davon hab ich keine Ahnung) Wie sieht es mit Cross-Plattfrom Support aus ?
Bitte antwortet nicht einfach nur mit einem Wort (dem Engine namen )... sondern begründet die Antwort auch in Bezug auf die 5 Punkte.
2 Antworten
Für Java auf Android bieten sich diese Tools zur Spiele-Entwicklung an:
- libGDX (Framework)
- jMonkeyEngine (Engine)
- Processing
- jPCT (3D Engine)
- PlayN (GitHub-Projekt; Bibliothek)
- FXGL (2D; Framework)
- Slick AE (2D; Bibliothek)
- JOGL (Binding zu OpenGL)
Vielleicht gibt es noch weitere, doch dafür musst du dann selbst recherchieren.
Andere Java Engines als die zwei genannten sind mir nicht bekannt und im Hinblick auf deine Anforderungen ist die jMonkeyEngine da wohl am besten aufgestellt (basiert auf Java, ist kostenlos, hat eine Dokumentation und ein eigenes Forum, iOS wird wohl zum Teil unterstützt).
Andernfalls würde ich dir libGDX empfehlen. Dieses Framework steht als Open Source zur Verfügung, genaue Lizenzbestimmungen werden auf der offiziellen Webseite erklärt. Um dein Produkt auch für iOS zu entwickeln, gibt es für Java nur die Lösung, auf die Multi-OS Engine zurückzugreifen. Wie diese in Kombination mit libGDX verwendet werden kann, wird hier erklärt.
Hey, danke für deine Antwort.
Ich habe mir die ganzen Tools angeguckt und finde libGDX am besten. Nun, noch eine letzte Frage, kann ich mit libGDX im vergleich zum SurfaceView irgendwas gegen die schlechte Performance machen ?
Du kannst stets etwas gegen schlechte Performance machen, indem du einfache Regeln einhältst: Nur sichtbares rendern, Objekte stets wiederverwenden (Object pooling), Texturen klein halten, usw.. außerdem solltest du überprüfen, wie oft der GC aufgerufen wird. Nach Möglichkeit sollte das nicht zu oft stattfinden.
Nach kurzer Recherche kann man weitere Tipps finden:
- http://magory.net/optimising-your-android-game/
- https://stackoverflow.com/questions/17347883/why-game-is-running-slow-in-libgdx
Das SurfaceView ist nur zum Teil hardwarebeschleunigt. Das Canvas-Rendering ist dabei der Part, auf den dies nicht zutrifft. Zudem nutzt es kein OpenGL. Das libGDX-Framework hingegen benötigt keine Hardwarebeschleunigung, da das Rendering via OpenGL (also in direkter Kommunikation mit der GPU) stattfindet.
Wenn du unbedingt Java programmieren willst, dann empfehle ich die Engine "Lightweight Java Game Library". Es benutzt OpenGL und ist "cross-platform". "Cross-Platform" heisst, dass du diese App nicht nur für Android Geräte , sondern auch für PCs oder sogar iOS-Geräte laufen lassen.
Hier ist ein Video, mit der man mit dieser Engine "Flappy Bird" programmiert wird.
Außerdem empfehle ich dir Unity 5, ist sehr einfach, kostenlos (solange du nichts ernstes damit anfangen willst), und einfach zu erlernen. Wegen der Performance: Sogar 3D-Spiele laufen auf einem 70€ Tablet verdammt flüssig.