IT Projekte / Home Lab / Smart Home / Games

Allgemein, Entwicklung

Devlog #1 Jump and Run – GoDot 4.2.1

Nachdem ich meine Entwicklung mit Java damals in der Schulzeit begonnen habe, bin ich auch mehr oder weniger dabei geblieben. Ich habe die App Entwicklung für Android ausprobiert, auch in Java und für iOS in Objective-C. Mit Angular in der Webentwicklung mich ausprobiert und bin über kurz oder lang dann doch bei Spiele Engines wie Unity oder GoDot gelandet. Nach dem Unity im September 2023 sein Preismodell angepasst hat, habe ich gemerkt, dass ich vielleicht doch besser auf eine komplett kostenlose und Open Source lizenzierte Engine setzen sollte. Dabei bin ich bei GoDot gelandet.

Ich habe mir in letzter Zeit immer wieder Devlogs auf YouTube angesehen und bin dabei unter anderem auf die Seite OpenGameArt.org gestoßen. Hier kannst Du für Spiele kostenlos zur Verfügung gestellte Dateien herunterladen und nutzen. Aber auch auf itch.io kannst Du sowohl kostenpflichtige als auch kostenlose Assets finden. Das bietet mir zum Beispiel den Vorteil, dass ich bei meinem Spiel mich nicht um das Design kümmern muss zu Beginn, sondern mich voll und ganz auf die Entwicklung konzentrieren kann.

Zunächst habe ich mir GoDot von der offiziellen Seite heruntergeladen. Du entpackst die Zip-Datei und kannst direkt die Anwendung ausführen. Du musst nichts installieren und GoDot selbst ist auch mit grade mal etwas mehr als 100 MB in der Version 4.2.1 wirklich nicht groß, im Gegensatz zu Unity oder Unreal, welche beide mehrere Gigabyte Platz benötigen.

Meine Entscheidung als erstes Spiel ist auf ein einfaches Jump and Run gefallen. Du sollst einen Charakter steuern, der nach links, rechts laufen und springen kann. Die Karte selbst soll aus einem Level bestehen, welches entweder endlos lange geht und sich vielleicht auch prozedural generieren lässt und oder dabei immer schwerer wird.
Wenn das alles steht, dann können weitere Funktionen eingebaut werden, wie zum Beispiel Items, die eingesammelt werden können oder Gegner, die entweder besiegt oder denen ausgewichen werden soll.

Asset Suche

Ich habe auf den zuvor genannten Seiten nach unterschiedlichen Assets gesucht und dabei folgende gefunden, die mich zu Beginn und am Ende auch angesprochen haben:

Am Ende habe ich mich dazu entschieden, die Tiles vom Swamp Paket und den Charakter aus dem Adventure Paket meinem Spiel hinzuzufügen. Wie schon zuvor geschrieben, alles nicht final, sondern nur zum Testen und Entwickeln.

Charakter Animation

An diesem Tag habe ich in der wenigen Zeit, die ich hatte, meinem Charakter die Animationen hinzugefügt.

Prozedural Plattform Generator

Dem Charakter habe ich ein Skript und hier die Animationen hinzugefügt, um diese ausführen zu können, bei der entsprechenden Aktion. Mit Hilfe folgendem GitHub Repository habe ich dann angefangen den Abend / die Nacht meinen eigenen endlos laufenden Plattformer zu erstellen. Dies aber nur in der Grundfunktionalität, welche mit der Zeit erweitert werden kann.

Charakter Sprung Animation

Super Mario Bros, New Super Mario Bros oder einen anderen Teil der Reihe hast Du vielleicht auch schonmal gespielt. Vielleicht ist Dir dabei auch aufgefallen, dass wenn Mario springt und den höchsten Punkt in seinem Sprung überwunden hat viel schneller fällt und somit seine Flugkurve nicht symmetrisch ist. In GoDot hingegen springt Dein Charakter von GoDot aus, wenn Du nichts änderst eine realistische Flugkurve. Ich habe nicht lange recherchieren brauchen und bin auf folgende Videos gestoßen, die ich Dir gerne empfehle, wenn Du Dich dafür interessierst.

Die Frage ist nun, soll es so bleiben wie ist oder möchte ich es ändern? Ich habe mich dazu entschlossen ein zweites Skript zu erstellen, welches auf folgendem Code aufbaut. Dann kann ich später immer noch entscheiden, welchen Sprung und welchen Stil ich haben möchte.

Charakter Sprung Animation

In einem kurzen Moment die Animationen auch dem neuen Skript hinzugefügt und begonnen meinen Code für die prozedurale Erstellung der Plattformen aufzuräumen.

Animierte Tiles

Aktuell versuche ich Items, die eingesammelt werden können, mit in mein Spiel zu integrieren. Hierbei sollen diese animiert sein und sich zum Beispiel drehen. Hierbei bin ich unter anderem auf dieses Video gestoßen: How to Create Animated TileSets in Godot 4, das funktioniert auch, wenn man die Tiles per Hand setzt. In meinem Falle, wenn ich diese meinem Generator hinzufüge, werden diese leider aktuell noch nicht angezeigt.

Animierte Tiles und Main HUD

Neuer Tag, neues Glück. Nach vielem herumprobieren bin ich nun auf die Lösung meines Problems gekommen und meine animierten Tiles werden nun auch angezeigt. Die Position ist zwar noch völlig falsch, aber ein weiterer Schritt in die richtige Richtung. Nachdem ich den Tag hatte über mein Problem nachzudenken, habe ich einen anderen Ansatz versucht und es ist am Ende ganz einfach. Erstelle ein TileSet mit mehreren Bilddateien und lasse diese dann in der TileMap aufrufen. Somit kann ich im selben Skript (dem der TileMap) angeben, wo welche Plattform und auch welcher Coin platziert werden soll.

Die anschließende Implementierung des Zählsystems und dem Anzeigen im erstelltem HUD war dann doch recht leicht.

Dann habe ich mich an die Anzeige der Distanz gemacht, welche dem Spieler die Inforation liefern soll, wie weit dieser schon gekommen ist.

Zum aktuellen Stand habe ich also einen Charakter, der sowohl nach links als auch rechts laufen und zudem springen kann. Ein Doppelsprung ist aktuell auch möglich und ich habe die Flugkurve angepasst. Die Welt / Das Level wird vollständig generiert anhand von vor gefertigten Bausteinen, die zufällig zusammen gesetzt werden. Ebenfalls werden in diesen Bausteinen zufällig Items angelegt, welche eingesammelt werden können. Im HUD kann aktuell die Anzahl der eingesammelten Items als auch die maximal erreichte Distanz des Spielers angezeigt werden.

Hauptmenü und Save Games anlegen

Heute habe ich mich damit beschäftigt, mein Hauptmenü zu erstellen. Hierbei hat mir folgendes Video beim Einstieg geholfen: Godot 4 Main Menu Beginner Tutorial Aber auch die Seite von Godot selbst mit ihrem Beitrag. Wenn es darum geht Save Games anzulegen, dann kann man hierzu sich das von GoDot selbst angelegte Repository ansehen, als auch die dazugehörigen Dokumentationen (Doku1 und Doku2).

Das Ziel soll sein, den High Score des Spielers zu speichern und anzuzeigen. Somit werde ich, wenn der Spieler stirbt prüfen, ob die Entfernung größer ist als zuvor, wenn dem so ist diese speichern, ansonsten die alte Speicherung beibehalten. Wenn das Level geladen wird, soll ebenfalls der High Score geladen und angezeigt werden. Ebenfalls kommt ein Game Over Screen, wenn der Spieler von der Karte fällt. Hier sind aktuell die gleichen Optionen wie im Hauptmenü.

Quellen:

Schreibe eine Antwort

* Bitte akzeptieren Sie unsere Datenschutzbedingungen.