Ich möchte meine Spiele-Engine von Grund auf neu schreiben, um sie zu lernen. Was sind die Voraussetzungen und wie kann ich das tun? Welche Programmiersprachen und Dinge empfehlen Sie mir? Auch wenn Sie gute Artikel und Bücher darüber haben, wird es großartig sein. Danke im Voraus!
Meine Programmiersprachen und Tools sind:
- C / C ++ ist es gut, nur C zu verwenden?
- Python
- OpenGL
- Git
- GDB
Was ich daraus lernen möchte:
- Core Game Engine
- Rendering / Grafik
- Spielablauf / Regeln
- Eingabe (Tastatur / Maus / Controller usw.)
Im Rendering / Grafik:
- 3D
- Schattierung
- Beleuchtung
- Texturierung
Antworten:
Sie können eine Game-Engine in praktisch jeder Sprache mit praktisch jeder Rendering-Methode schreiben. Sie können eine Game-Engine in Bash schreiben, indem Sie beispielsweise die Konsolenausgabe verwenden.
Ich denke, es ist am besten zu definieren, was genau Sie lernen möchten, wenn Sie Ihre eigene Engine schreiben. Es gibt viele "Felder" in der Spieleentwicklung.
Core Game Engine
Rendering / Grafik
AI
Vernetzung
Spielablauf / Regeln
Klang
Eingabe (Tastatur / Maus / Controller usw.)
etc .. Von dort können Sie sogar Unterthemen haben. In Rendering / Grafik
2D oder 3D?
Modellieren
Schattierung
Beleuchtung
Texturierung
GUIs / Huds / Interfaces.
etc, etc
Nur eines dieser Unterthemen könnte viele Stunden (oder Jahre!) Des Studiums kosten!
Definieren Sie also zunächst, was Sie lernen möchten. Einfach anfangen.
Verwenden Sie die Sprache, mit der Sie sich auskennen - obwohl einige für bestimmte Aufgaben besser geeignet sind. Die Core-Engine und das Rendering lassen sich wahrscheinlich am besten mit einer "niedrigeren" Sprache wie C / C ++ ausführen (wenn Sie also Leistung benötigen). Aber so etwas wie KI oder Spielregeln könnte besser in einer höheren Sprache gemacht werden. Nichts sagt, dass Sie nicht mischen und zusammenpassen können. Sie könnten Ihre Engine in C ++ schreiben, Ihr Rendering in C (da es gut mit OpenGL funktioniert) und dann LUA zum Skripten Ihrer Spielregeln usw. verwenden.
Zum Beispiel gibt es eine Game-Engine namens Slick2D. Es ist in Java geschrieben und Open Source. Es ist ein Beispiel für eine einfache 2D-Engine, die wirklich gut geschrieben und entworfen wurde. Daraus können Sie grundlegende Konzepte lernen, wie z. B. Spielschleifen, Verwalten von Spielzuständen usw.
Wenn Sie mit C / C ++ vertraut sind; Ich würde vorschlagen, einen Blick auf SDL / OpenGL zu werfen. Es kümmert sich um einige Dinge wie Eingabe, Sound, Erstellen von Fenstern usw. und kann sich auf andere Dinge konzentrieren.
quelle
SDL + OpenGL ist eine hervorragende Wahl, um eine benutzerdefinierte Game-Engine zu starten.
Ich persönlich benutze eine C-ish-Version von C ++, weil ich herausgefunden habe, dass das für mich am besten funktioniert. Damit meine ich, ich benutze keine Ausnahmen. Dafür gibt es zwei Gründe: Zuallererst erfordern Ausnahmen ausnahmesicheren Code, der mit OpenGL und SDL nicht ganz einfach zu erreichen ist. Noch wichtiger ist jedoch, dass es auf diese Weise sehr einfach ist, C ++ - Objekte über C ABI verfügbar zu machen. Dies ist unglaublich hilfreich, wenn Sie versuchen, eine Skriptsprache in die Mischung aufzunehmen.
Ich bin in einem ähnlichen Boot wie Sie und habe einige meiner Abenteuer mit SDL und OpenGL in einem Blog ( immersedcode.org ) niedergeschrieben, falls jemand anderes daran interessiert ist.
Für die allgemeine Architektur habe ich zwei Vorschläge: Wenn Sie eine 3D-Engine möchten, lesen Sie das Buch "Game Engine Architecture" von Jason Lander. Wenn Sie nur 2D möchten, gestalten Sie das Design so einfach wie möglich und lassen Sie sich von XNA oder anderen Projekten inspirieren.
Zuletzt: Rufen Sie nicht überall OpenGL an. Tun Sie sich selbst einen Gefallen und isolieren Sie ihn an mehreren Stellen, damit Sie zu einem späteren Zeitpunkt zwischen Desktop OpenGL / OpenGL ES oder sogar DirectX wechseln können, wenn Sie dies möchten.
quelle
Verwenden Sie C nur, wenn Sie von einem Implementierungsdetail mit vorgehaltener Waffe dazu aufgefordert werden. Verwenden Sie andernfalls C ++, da es eine weitaus leistungsfähigere Sprache ist und Sie diese Funktionen später immer noch nicht verwenden können. Ich persönlich habe nichts für / gegen Python, ich habe es nie benutzt.
Ich würde OpenGL nicht gegen DirectX empfehlen, da DX einen modernen objektorientierten Ansatz hat, der weitaus sauberer und verständlicher / weniger fehleranfällig ist. Die von OpenGL angebotene Schnittstelle ist im Vergleich extrem schlecht.
Das Letzte, was ich habe, ist, dass ich von vielen Leuten gehört habe, denen ich vertraue, dass GDB absolut zum Kotzen ist und der Visual Studio-Debugger bei weitem der beste ist. Dies ist nicht meine persönliche Erfahrung, nehmen Sie es mit ein wenig Salz.
quelle
extern "C"
, das so genannt wird , und seine angemessene Verwendung macht das Schreiben einer C-Schnittstelle eher trivial - insbesondere für Python, wo in Boost ein Konverter vorhanden ist, der das Binden erleichtert. Wie wäre es mit C ++ - Sprachfunktionen? Sie sind großartig . Die stärkere Verwendung der Sprachfunktionen von C ++ erhöht die Zuverlässigkeit eines Projekts und erleichtert das Codieren massiv, was zu einem mehr als akzeptablen, sehr geringen Leistungsverlust führt. Die Sprachmerkmale von C sind im Vergleich erbärmlich. Beispielsweise kann die korrekte Verwendung eines modernen C ++ - Compilers keine Speicherverluste garantieren . Tun Sie das in C.