31 Punkte von GN⁺ 2023-11-26 | 1 Kommentare | Auf WhatsApp teilen

Den Spaß am Programmieren wiederfinden: Burnout mit Spieleentwicklung überwinden

  • Häufige Klage in Entwickler-Communitys: die Leidenschaft fürs Coden ist verloren gegangen
  • Tipp gegen Burnout: ein eigenes Spiel entwickeln, um wieder Freude am Programmieren zu finden
  • Persönliche Erfahrungen darüber, wie Spieleentwicklung zur Begeisterung für Programmierung geführt hat
  • Empfehlung, Spiele mit der Sprache Go und der Bibliothek Ebitengine zu entwickeln

Grundprinzipien der Spieleentwicklung

  • Ähnlich wie beim Film besteht ein Spiel aus schnell aufeinanderfolgten Bildern (Frames)
  • Ein Spiel erzeugt Bilder in Echtzeit und verändert den nächsten Frame abhängig von Benutzereingaben
  • Ein Spiel ist im Kern eine Endlosschleife, in der das Zeichnen von Bildern und das Aktualisieren der Logik wiederholt werden

Projekt-Setup

  • Ein Go-Modul erstellen und die Bibliothek Ebitengine hinzufügen
  • Ein leeres Fenster mit einer minimalen Implementierung des Game-Interfaces starten

Assets laden

  • Empfohlen wird, Programmer Art zu verwenden oder kostenlose Assets zu nutzen
  • Das Paket embed verwenden, um Assets in den Code zu laden

Bilder zeichnen

  • Alle Zeichenoperationen innerhalb der Draw-Methode ausführen
  • Die Methode DrawImage von ebiten.Image verwenden, um ein Bild auf ein anderes zu zeichnen
  • Über die Struktur DrawImageOptions Position, Rotation und Skalierung des Bildes steuern

Spiellogik

  • Die Struktur Game hält den Spielzustand und verändert ihn über die Methode Update
  • Als Beispiel wird die Position des Spielers als (X-, Y-)Vektor gespeichert

Bewegung

  • Bewegung wird umgesetzt, indem die Position des Spielers in der Update-Methode aktualisiert wird
  • Die Position des Spielers wird abhängig von der Tastatureingabe verändert

Timer

  • Implementierung eines Timers, um Spiellogik abhängig von der Zeit zu verändern
  • Mit einer Struktur Timer Ereignisse in bestimmten Zeitabständen auslösen

Spielobjekte

  • Spielobjekte wie der Spieler werden gekapselt und verwaltet
  • Jedes Objekt hat eigene Update- und Draw-Methoden

Objekte erzeugen

  • Ein Meteor-Objekt erzeugen und am Bildschirmrand spawnen lassen
  • Die Struktur Game verfolgt die Meteor-Objekte

Kugeln abfeuern

  • Schusslogik und einen Cooldown-Timer implementieren
  • Player erzeugt Kugeln und Game verfolgt sie

Kollisionserkennung

  • Für die Kollisionserkennung eine Struktur Rect und eine Methode Collider() implementieren
  • In Update des Spiels Kollisionen zwischen Objekten prüfen

Meinung von GN⁺

Das Wichtigste an diesem Artikel ist, dass er Entwicklerinnen und Entwicklern einen Weg zeigt, Burnout zu überwinden und die Begeisterung fürs Programmieren zurückzugewinnen. Spieleentwicklung bietet die Möglichkeit, Programmierfähigkeiten in einem kreativen und unterhaltsamen Projekt zu trainieren und gleichzeitig eine neue Sprache oder Bibliothek zu lernen. Der Artikel inspiriert dazu, Coden wieder als Hobby zu genießen, und weckt Interesse, indem er einen grundlegenden Ansatz zur Spieleentwicklung mit der Sprache Go und der Bibliothek Ebitengine erklärt.

1 Kommentare

 
GN⁺ 2023-11-26
Hacker-News-Kommentare
  • Der erste Nutzer bevorzugt es, beim Erlernen einer neuen Sprache oder Grafik-API Feuerwerk oder eine einfache Partikelsimulation als Performance-Test zu schreiben. Als er 2021 mit Go und Ebitengine experimentierte, war er von der überraschend hohen Leistung und der einfachen Nutzung tief beeindruckt, da sich bei 60 fps sehr viele Pixel bewegen ließen.
  • Der zweite Nutzer hat im vergangenen Jahr mit Go Sprach ein Spiel unter Verwendung von g3n-engine entwickelt. Er entschied sich dafür, weil er Go mag und lernen wollte, und wählte nach früheren Erfahrungen mit 2D-Spielentwicklung g3n-engine, weil er auch in 3D arbeiten wollte. Spieleentwicklung ist eine deutlich anspruchsvollere und lohnendere Erfahrung als bezahlte Arbeit, und es gibt ständig Neues zu lernen.
  • Der dritte Nutzer erwähnt, dass die Ebiten-API für Go sehr gut sei und man sich vom API-Design inspirieren lassen könne. Außerdem verbessert er die Performance bei der Spieleentwicklung mit einem benutzerdefinierten Compiler, der Go in C++ übersetzt, ermöglicht den Zugriff auf C/C++-APIs und bietet auch in WebAssembly gute Leistung. Dieser Compiler umfasst auch Experimente zur Erzeugung von GLSL aus Go-Code.
  • Der vierte Nutzer ist zwar kein Go-Entwickler, verfolgt aber seit Langem einen YouTuber/Twitch-Streamer, der Spiele mit Go erstellt. Dieser Streamer entwickelt mit Go ein kleines MMO und erstellt mit OpenGL und WASM eine Web-Version. Obwohl er versteht, dass der Garbage Collector von Go sehr robust ist, fragen viele Leute dennoch: „Warum mit Go?“
  • Der fünfte Nutzer reagiert nur auf den ersten Teil des Artikels und schlägt vor, bei dem vom Autor beschriebenen Burnout eher die eigenen Interessen weiterzuentwickeln, statt ein Hobby „zurückzuerobern“. Das könnte ein Zeichen dafür sein, dass das Gehirn stagniert, und auch wenn es nichts mit Programmierung zu tun haben muss, könnte es an der Zeit sein, tiefer in die Informatiktheorie einzutauchen.
  • Der sechste Nutzer berichtet als langjähriger Ebitengine-Nutzer von zufriedenstellenden Erfahrungen. Wer sich den Quellcode von mit Ebitengine erstellten Spielen ansehen möchte, sollte die awesome-ebitengine-Liste prüfen. Alle auf dem itch.io-Profil dieses Nutzers aufgeführten Spiele wurden mit Ebitengine erstellt und sind sämtlich Open Source.
  • Der siebte Nutzer entwickelt derzeit ein Spiel mit Ebitengine und empfindet die Erfahrung als erfrischend.
  • Der achte Nutzer stellt infrage, ob Go eine geeignete Plattform zum Schreiben großer Spiele ist und ob es genug Bibliotheken und Leistung gibt, um die Verwendung von C# zu rechtfertigen.
  • Der neunte Nutzer fragt sich aufgrund des Goroutinen-Konzepts von Go, ob es eine geeignete Sprache für die Spieleentwicklung ist, und denkt darüber nach, es irgendwann auszuprobieren.
  • Abschließend gibt es einen Hinweis auf ein auf Ebitengine basierendes Spiel sowie den Verweis darauf, dass ein Satz zu „wie ein Beispiel für eine Sprite-Komponente aussehen könnte“ abgeschnitten ist und korrigiert werden muss.