Spielprogrammierung: gängige Methoden und Entwurfsmuster [geschlossen]


9

Ich habe angefangen, eine sehr einfache Spiel-Engine zu schreiben, damit ich OpenGL 3.x besser lernen kann, aber da ich unerfahren bin und nur wenig darüber weiß, wie ein 3D-Spiel gestaltet werden sollte, stoße ich normalerweise auf Probleme, bei denen mir klar wird, dass ich meine Klassen hätte gestalten sollen anders. Andere Probleme, mit denen ich konfrontiert bin, sind, wie man die Zeit im Spiel präzise verfolgt und die Bewegung nach Bedarf aktualisiert und dem Renderer mitteilt, dass er neu zeichnen muss. Außerdem muss ich immer wieder Get- und Set-Funktionen erstellen, um verschiedene Flags von einem Objekt an ein anderes zu übergeben. Ist das eine schlechte Praxis?

Wie der Titel schon sagt, interessiere ich mich für Bücher oder Artikel / Tutorials und Quellen, die mir helfen könnten und einige gängige Designmuster im Spieldesign erklären würden (z. B. Handler für Spielstatus, Schriftarten usw.).

Übrigens, ich verwende immer noch Freeglut. Würden Sie mir empfehlen, vor dem Fortschreiten oder nachdem ich OpenGL besser verstanden habe, auf ein besseres Fenstersystem umzusteigen?


12
Standardantwort "Ich schreibe eine Engine" = Spiele schreiben, keine Engines. Motoren sind ein tiefes Kaninchenloch, in das man fallen kann. Welche Recherchen haben Sie bisher durchgeführt? Hier erzielen Sie die besten Ergebnisse, indem Sie ein einzelnes, fokussiertes Problem auswählen und nach früheren Fragen suchen. Suchen Sie nach neuen Themen, während Sie nacheinander Ihr Spiel schreiben. Als Randnotiz ist es üblich zu erkennen, dass Klassen neu gestaltet werden müssen, und der Vorgang, der als "Refactoring" bezeichnet wird, bedeutet, dass Sie lernen, während Sie gehen, und das ist eine gute Sache.
Patrick Hughes

1
Vielen Dank für Ihre Antwort. Es tut mir leid, wenn ich nicht klar war, ich möchte nicht wirklich eine vollwertige Spiel-Engine bauen, aber ich möchte einige grundlegende Designmuster lernen, die im Spieldesign verwendet werden, damit ich meine Klassen besser gestalten kann. Ich denke, es sollte einige gemeinsame Lösungen für gemeinsame Probleme geben. Je tiefer ich in das Design eintauche, desto mehr Probleme treten auf und desto schwieriger ist es, Antworten zu finden. Meine bisherigen Recherchen waren nicht allzu fruchtbar. Ein nettes Tutorial, das sich eingehender mit den Grundlagen eines Spiels befasst, ist codeproject.com/Articles/27219/… .
Grieverheart

1
Ich sehe, wenn man "Game Engine Common Methods" in die Überschrift setzt, lenkt man die Diskussion tendenziell in Richtung ... Engines =) In jedem Fall fällt es Ihnen schwer, das zu finden, wonach Sie suchen, weil es so viele gibt verschiedene Arten von Spielen, da es Jahre in einem Maya-Kalender gibt und jede Art ihre eigenen Bedürfnisse hat. Sie können bessere Ergebnisse erzielen, wenn Sie nach einer bestimmten Art von Spiel suchen. Ego-Shooter sind sehr verbreitet, um Suchmaschinen eine gewisse Traktion zu verleihen.
Patrick Hughes

Ein FPS-Stil oder Free-Roaming wäre das, wonach ich suche. Im Wesentlichen möchte ich eine Welt schaffen, in der ich mit verschiedenen Grafiken und Animationstechniken experimentieren kann. Ich habe bereits eine grundlegende Kamera und Bewegung wie Springen und Strafing und Modellladen, aber es fühlt sich nicht ganz richtig an, z. B. habe ich die Laufanimation in die Kameraklasse eingefügt und verwende eine interne Variable, um Bilder zu zählen. Ich flicke meistens die Löcher und produziere nichts Robustes. Ich denke, das ist Teil des Lernprozesses und vielleicht versuche ich, mich zu schnell zu bewegen.
Grieverheart

3
Game Coding abgeschlossen, Game Engine Architektur sind zwei Bücher über das Codieren von Spielen. Sie erhalten einen allgemeinen Überblick über die Entwicklungspipeline und die zugrunde liegende Technologie. Sie berühren ein bisschen von allem
Dreta

Antworten:


11

Ich werde eine richtige Antwort schreiben, da ich vor ungefähr 2 Monaten auf Ihrer Bühne war.

Ich habe angefangen, eine sehr einfache Spiel-Engine zu schreiben, damit ich OpenGL 3.x besser lernen kann, aber da ich unerfahren bin und nur wenig darüber weiß, wie ein 3D-Spiel gestaltet werden sollte, stoße ich normalerweise auf Probleme, bei denen mir klar wird, dass ich meine Klassen hätte gestalten sollen anders.

Mach dir keine Sorgen. Aufgrund Ihrer mangelnden Erfahrung werden Sie nie in der Lage sein, über alle Möglichkeiten und Möglichkeiten nachzudenken, wie eine bestimmte Klasse in Ihrem Motor verwendet wird. Am besten betrachten Sie die Hauptfunktionen der Klasse, implementieren sie und strukturieren sie später neu. Versuchen Sie nicht, Dinge zu überdenken, Sie werden in dieser Phase Ihre Zeit verschwenden. Mein erstes Spiel war ein komplettes Durcheinander, ich bin sicher, dass es bei den meisten Leuten der Fall war.

Andere Probleme, mit denen ich konfrontiert bin, sind, wie man die Zeit im Spiel präzise verfolgt und die Bewegung nach Bedarf aktualisiert und dem Renderer mitteilt, dass er neu zeichnen muss.

Was Sie brauchen, ist das Wissen darüber, was eine Spielschleife ist. Dies ist ein guter Anfang. Sobald Sie anfangen, komplexeren Code wie den Umgang mit Physik zu schreiben, sollten Sie Schleifen mit variablen Frame-Zeiten in Betracht ziehen, aber klein anfangen. Eine einfache Spielschleife mit festem Rahmen sollte Ihnen vorerst ausreichen.

Außerdem muss ich immer wieder Get- und Set-Funktionen erstellen, um verschiedene Flags von einem Objekt an ein anderes zu übergeben. Ist das eine schlechte Praxis?

Dies ist eher eine Frage der Softwareentwicklung. Mit der Zeit werden Sie sehen, welche Daten Sie schützen müssen und welche sicher sind. Es ist wahrscheinlich am besten, wenn Sie nur eine Funktion implementieren und dann sehen, was außerhalb davon nicht verfügbar ist und als öffentliche Daten behandelt werden kann.

Es ist alles eine Frage der Erfahrung. Sie schreiben eine Kameraklasse und sehen dann neben den Transformationsmatrizen, welche Funktionen Sie von ihr erwarten. Wenn Sie sofortige Tipps wünschen, muss ich sagen, implementieren Sie Bare Bones, erweitern Sie später.

Artikel und Bücher:

  • Game Engine Entwicklung

Diese Bücher sprechen über die Architektur moderner Game-Engines und Pipelines. Sie geben Ihnen einen guten Überblick über die zugrunde liegende Technologie. Ich empfehle das erste Buch, wenn Sie sich entscheiden müssen, es ist weniger "voreingenommen" gegenüber bestimmten Technologien, obwohl Sie am Ende wahrscheinlich beide durchstehen möchten, da sie großartige Wissensquellen sind.

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • Kollisionserkennung

http://www.peroxide.dk/papers/collision/collision.pdf

(Ich verknüpfe dies, weil ich es schwierig fand, Artikel darüber zu finden, wie eine korrekte 3D-Kollisionserkennung durchgeführt wird.)

Es gibt mehr Bücher, aber wenn Sie damit fertig sind (insbesondere die Game Engine-Architektur), wissen Sie besser, was Sie wollen.

Übrigens, ich verwende immer noch Freeglut. Würden Sie mir empfehlen, vor dem Fortschreiten oder nachdem ich OpenGL besser verstanden habe, auf ein besseres Fenstersystem umzusteigen?

WinAPI, wenn Sie das Gefühl haben, Zeit und Willen zum Erlernen der Windows-Programmierung zu haben (wenn Sie für Windows entwickeln). FreeGLUT ist gut zum Lernen geeignet, aber irgendwann möchten Sie mehr Funktionalität. Wenn Sie jedoch einen völlig anderen Weg einschlagen möchten, können Sie OpenGL mit Bibliotheken wie SFML oder SDL starten. Bleib bei FreeGLUT, es sei denn, du bist stur wie ich. Ich habe mich direkt für WinAPI entschieden.


Hey Dreta, vielen Dank für deine sehr nette Antwort, auf die ich gewartet habe: P! Zum Glück weiß ich bereits, wie man Kollisionen erkennt, da ich bereits einige Algorithmen für physikalische Simulationen implementiert habe :).
Grieverheart

@ user1294203 genial, ich war verloren, als ich anfing, also postete es einfach für den Fall
dreta

Ich stimme für SFML, wenn Sie nicht zu viel mit plattformspezifischem Code herumspielen möchten. Es ist klein, einfach, sauber und Sie können leicht in Code eintauchen, um zu verstehen, wie es beispielsweise WINAPI umschließt.
edin-m
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.