Wie Programmiert man ein 2D Top Down RPG Spiel?
Hi, ich programmiere jetzt schon etwas länger und wollte mit ein paar Freunden ein 2D Top Down Rpg Spiel entwickeln...
Leider wissen wir nicht so richtig womit/wie wir anfangen sollen...
Falls jemand Links für Tutorials (Wenn möglich in Deutsch) oder auch Tipps hat wäre ich sehr dankbar...
PS: Wir Programmieren nicht mit Unity sondern wollen eine eigene Engine benutzen
4 Antworten
Am besten beginnt ihr mit dem üblichen Analyseprozess, der euch bewusst macht, was ihr wollt und was ihr braucht. In der Spieleprogrammierung redet man hier von einem Game Concept (Lastenheft) und einem Game Design Document (Pflichtenheft). Auf Gamasutra findet sich ein wegweisender, mehrseitiger Artikel dazu: The anatomy of a design document.
Ihr werdet merken, dass ihr euch wahrscheinlich mit mehreren verschiedenen Themen ausführlicher beschäftigen müsst, wenn es gut werden soll.
- Game Design und Game Logic
- Software Architektur - speziell für Spiele
- Bestimmte Algorithmen wie A*
- Projektdesign - Code Konventionen, Strukturierung, gemeinsames Arbeiten über ein Versionverwaltungssystems, u.ä. - lies dazu hier
- Storytelling
- Video-, Grafik und Audiogestaltung - sowie die Handhabung der entsprechenden Software dazu
- Datenserialisierung
Der letzte Punkt ist beispielsweise schon einmal einer jener, welcher als Basisfunktionalität geführt werden dürfte und bei dem entschieden werden muss, wie flexibel er gestaltet werden soll. Welchen Einfluss sollen Spieler auf Spieldaten haben?
Für eine eigene Engine wird dies also ein wichtiges Thema - ebenso Probleme wie Grafikrendering oder Audio- und Textwiedergabe. Ihr solltet euch da bestehende Bibliotheken nehmen, um einiges an Aufwand einzusparen. Je nachdem, wie komplex die Engine werden soll, könnten noch Themen wie GUI-Design oder Scripting / Themen der theoretischen Informatik (Grammatiken, u.ä.) hinzukommen. Mein Ratschlag wäre aber, es so einfach wie möglich zu halten und lediglich Bibliotheken zusammenzunehmen, die die jeweiligen Funktionalitäten bieten. Umso komplexer eine Engine wird, umso mehr entfernt ihr euch von dem eigentlichen Ziel, das gewünschte Spiel zu entwickeln. Einfach ist so ein Unterfangen auch nicht.
Weiterhin ist es notwendig, dass ihr mehr recherchiert und euch über den üblichen Aufbau von solchen Spielen informiert. Open-Source-Projekte finden sich in diesem Bereich ja auch zuhauf. Im Folgenden kann ich ein paar Methodiken anreißen:
Üblicherweise bauen Spiele auf einer draw loop auf, die, wie es der Name schon sagt, das Zeichnen der einzelnen Spielelemente übernimmt. Elemente, die im Spiel gezeichnet werden sollen, müssen in dieser Schleife also registriert werden. Ein simples Beispiel zur Veranschaulichung:
Snake snake = new Snake();
void draw() {
while(true) {
snake.draw();
wait(timePerFrame);
}
}
Elemente, die in ihr gezeichnet werden, können noch weiter unterteilt werden. So könnten in der draw-Methode für die Schlange die einzelnen Segmente gezeichnet werden.
Das zu zeichnende Spielfeld wird in ein Raster aufgeteilt (Tilemap). Damit das Spiel mehr Räumlichkeit bekommt, unterteilt man es in verschiedene z-Ebenen. Diese werden durch die Reihenfolge, in der man zeichnet, bestimmt.
Hat man also eine Wiese, einen Spieler und einen Baum, dann zeichnet man diese auch in der genannten Reihenfolge, sodass der Baum im Vordergrund liegt, die Wiese hingegen im absoluten Hintergrund.
Eine simple Tutorial-Serie, die auch in deutscher Sprache ist, findet sich hier. Sie eignet sich zur Erklärung wesentlicher Grundelemente.
Welche Überlegungen habt ihr euch denn bisher gemacht? Woran genau hängt es? Planung, Verständnis der Umsetzung von Top-Down-Ansichten, generell Spielentwicklung, oder was?
Top-Down im Sinne von oben herab (Snake, die ersten GTA) oder eher 2.5D (Binding of Isaac)?
PS: Wir Programmieren nicht mit Unity sondern wollen eine eigene Engine benutzen
Unity ist nicht die einzige Engine. Warum entwickelt ihr nicht nicht in Unreal, GM, CryEngine, oder sonst einer anderen Engine?
Habt ihr eure eigene "Engine" bereits entwickelt?
Wenn ihr bereits programmieren könnt, dann braucht ihr keine Tutorials. In deutscher Sprache werdet ihr sowieso kaum welche finden - schließlich programmiert man auch auf Englisch.
Nein die Engine haben wir noch nicht entwickelt und mir ist bewusst das man in Englisch Programmiert aber mir fällt wieso auch immer der Anfang schwer...
Wenn ich dann einmal drin bin hab ich fast keine Probleme mehr...
In welcher Sprache wollt ihr den das Spiel programmieren bzw. welche Sprachen könnt ihr den? :)
Dann arbeitet doch mit eines der zahlreichen Tools, die Java für die Spieleentwicklung bietet:
- LWJGL
- libGDX
- Slick2D
- Processing
- FXGL
- PlayN (GitHub-Projekt)
- jMonkeyEngine
- ogre4j (Ogre-Wrapper für Java)
- Jenga
- WurfelEngine
Man muss doch für ein Spiel das Rad nicht neu erfinden. Genügend Logik gäbe es ganz sicher so und so noch zu implementieren.
Wir Programmieren nicht mit Unity sondern wollen eine eigene Engine benutzen
Überlegt euch das nochmal gut. Ich weiß, dass man gerade als Programmieranfänger ganz heiß darauf ist, seine eigenen Sachen zu programmieren, aber ich behaupte mal, euch ist nicht bewusst, was ihr da vorhabt.
Um euch zu verdeutlichen, was da auf euch zu kommt, wenn ihr eure eigene Engine programmiert: http://preshing.com/20171218/how-to-write-your-own-cpp-game-engine/ Das its C++, das kann deutlich mehr als Java, nur um euch mal zu zeigen, was da so abgeht bei einer eigenen Engine.
Sonst kann ich euch zum Stöbern empfehlen:
- http://gameprogrammingpatterns.com/contents.html
- https://www.gamasutra.com/blogs/MichaelKissner/20151027/257369/Writing_a_Game_Engine_from_Scratch__Part_1_Messaging.php
- https://www.philipphauer.de/study/se/design-pattern.php
Es hat schon Gründe, warum eine Engine wie Unity so populär ist :)
Am meisten Java