Phaser.js und TypeScript als simpler Game Engine Stack
Phaser.js und TypeScript sind zusammen ein netter Tech Stack um damit einfache Spiele für das Web zu programmieren. Ich habe diese Sommer viele Erfahrungen damit sammeln dürfen.
Phaser.js und TypeScript als simpler Game Engine Stack
In den letzten 3 Monaten habe ich mich intensiv in TypeScript eingearbeitet. Das war nötig für meinen Job, um das spannender zu machen habe ich daraus ein Hobby Projekt mit der Phaser.js 2D Engine gemacht. Resultat der Arbeit:
- mehrere NPM Pakete
- Open Source Pakete auf Github
- die Erfahrung, dass JavaScript für meinen Bedarf viel zu langsam ist
Im Prinzip stellt dieser Artikel ein Post-Mortem dar und soll dir, lieber Leser Informationen VOR deinem neuen Projekt liefern. Den Source Code für die NPM Pakete findet ihr auf meiner GitHub Seite oder direkt auf NPM die Pakete.
Warum TypeScript?
Wir haben bei uns in der Arbeit eine Vorgabe die uns zwingt für Frontend Applikationen immer TypeScript anstatt JavaScript zu verwenden. Durch die Typsicherheit wird sichergestellt, dass der Code zur Laufzeit auch funktioniert. Gerade wenn viele Entwickler (intern und extern) daran arbeiten handelt man sich sonst schnell massive Probleme ein.
Warum Phaser.js?
Ich habe mich aus 3 Gründen für Phaser entschieden:
- es ist Open Source, d.h. ich könnte selber neuen Features hinzufügen
- es ist einfach, gut dokumentiert und man findet zahlreiche Tutorials (Youtube, Blogs,…)
- in der damals aktuellsten Version kamen hexagonale Tilemaps als neues Feature hinzu
Im großen und ganzen bin ich mit der Wahl der Engine sehr zufrieden.
Warum Hexagons?
Das ist eine persönliche Präferenz die mich seit meinem Studium begleitet. Fakt ist, dass hexagonale Tilemaps gegenüber quadratische Tilemaps einige Vorteile bietet, da verweise ich aber gerne auf externe Literatur, beispielsweise H3 von Uber.
Erfahrungen
Ich bin kein Fan von JavaScript und meide diese Sprache so weit möglich. Durch die Nutzung von TypeScript bin ich jedoch in den letzten Wochen in das Ökosystem rund um die Frontendentwicklung hineingewachsen. TypeScript macht durchaus Spaß und ich würde auch gerne weiterhin damit arbeiten.
Zuletzt habe ich einen Stresstest implementiert ob der den aktuellen Stand meines Projekts auch für den möglichen Einsatzbereich simuliert. Das Ergebnis war noch ok, die komplette Karte kann mit Einheiten gefüllt werden und das Scrollen funktioniert noch halbwegs flüssig. Trotzdem habe ich mich für einen Abbruch entschieden. Die Befürchtung neue coole Features aufgrund von Performance Bottlenecks nicht implementieren war mir zu groß. Mit einer echten Game Engine in einem besseren Techstack ist die Implementierung meiner Meinung nach in gleichem oder geringeren Aufwand möglich.
Der Grund kurz formuliert: ich möchte Features implementieren und nicht an einem Game Core arbeiten und Performance Probleme lösen die eine richtige Engine bereits out-of-the Box kann.
Wie geht es weiter?
War die Arbeit umsonst? Keineswegs. Ich habe viel gelernt und mit der Codebasis auch einen Mehrwert geschaffen. Die Motivation an dem Projekt weiter zu arbeiten ist ungebrochen, deshalb übernehme ich aktuell diese Bibliotheken in C# um diese in einer echten Game Engine zu verwenden. Mein Favorit dafür ist Aktuell GODOT.
Fazit