Wo passt der Spielcode in die Engine?

7

Ich habe mich gefragt, ob mir jemand sagen kann, wie das Spiel und die Spiel-Engine in die Spieleentwicklung passen. Was ich speziell meine ist, dass die Spiel-Engine eigentlich kein Spiel enthält. Erstellen Spieleentwickler eine Engine und erstellen dann eine neue Klasse, die von der Engine erbt, die zum Spiel wird?

Zum Beispiel,

class ShooterGame : public Engine
{
};

Ich bin mir nicht sicher, wo der Spielcode in die Engine passt.

jmasterx
quelle
1
Dies: Scientificninja.com/blog/write-games-not-engines beschreibt grob meine Gedanken darüber, wie ein Motor entstehen sollte. Wie andere angedeutet haben, geht es hauptsächlich darum, die wiederverwendbaren Komponenten von Spielen zu extrahieren, wenn Sie sie beenden und mit dem nächsten Projekt fortfahren.
Versuch, diese Frage zu retten; Aber ich bin mir nicht sicher, wo das passt, abgesehen von "Broad Game Engines".
Gnemlock
@Gnemlock: Vielleicht Terminologie , da es über die Linie , wo wir nennen etwas „Maschinencode“ vs „Spiel - Code“?
DMGregory

Antworten:

24

Lassen Sie sich nicht vom Konzept einer "Game Engine" einfangen. Zwar verfügen Spielestudios häufig über eine Art Spiel-Engine, die sie erstellen, um den Produktionsprozess von Spielen zu beschleunigen, doch viele unabhängige Entwickler versuchen, eine Spiel-Engine zu erstellen, mit der sie nie etwas machen, das tatsächlich funktioniert.

Eine Spiel-Engine kann alles sein, was Sie wollen. Wenn Sie genug Gemeinsamkeiten zwischen Ihren Spielen finden, um eine EngineKlasse wie Ihr Beispiel zu unterordnen, ist das in Ordnung. Wenn eine "Engine" wirklich nur eine kleine Bibliothek von Funktionen ist, die Sie in früheren Spielen, die Sie entwickelt haben, als nützlich empfunden haben, ist das auch großartig. Was auch immer es für Sie bedeutet, das Konzept einer "Engine" ist nur wiederverwendbarer Code, mit dem Sie mehr Spiele erstellen können.

Wenn Sie jedoch versuchen, ein Spiel zu erstellen, konzentrieren Sie sich nicht darauf, eine Engine zu erstellen. Mach ein Spiel. Sobald das Spiel beendet ist und Sie bereit sind, Ihr zweites zu erstellen, beginnen Sie mit dem zweiten, und Sie werden Teile finden, die Sie bereits in Ihrem ersten Spiel erstellt haben. Dann können Sie diese Bits in eine Bibliothek oder Engine extrahieren, um sie zwischen den beiden Spielen zu teilen. So sollte ein Motor hergestellt werden. Es ist normalerweise nichts, was Sie vor dem Erstellen eines Spiels schreiben möchten, da Sie am Ende Tonnen von Code haben, der nicht getestet wurde, und Sie schreiben im Wesentlichen Dinge, bevor Sie wissen, dass Sie sie brauchen (daher brauchen Sie sie möglicherweise nicht einmal). Dies ist wie eine vorzeitige Optimierung, aber schlimmer.

Um Ihre Frage direkt zu beantworten, ist eine Spiel-Engine im Grunde eine wiederverwendbare "Sache" (Bibliothek, Tool, Framework), die ein Spielestudio verwendet, um schnell Spiele zu erstellen. Sie wird normalerweise für bestimmte Spiele oder nach deren Erstellung erstellt Mehrere Spiele, bei denen ähnliche Teile herausgezogen und zu einer Engine geformt werden, von der sie wissen, dass sie in zukünftigen Spielen verwendet werden kann. Es sollte fast nie ohne Rückblick (zwei oder mehr bereits erstellte Spiele) oder umfassende Planung erstellt werden.

Ricket
quelle
3
+1: Holen Sie sich etwas Konkretes, bevor Sie über wiederverwendbaren Code nachdenken. Oft gehackter Code hilft Ihnen zu erkennen, was besser sein könnte (und führt zu mehr wiederverwendbarem Code).
Michael Coleman
7

Im Grunde ist mir unklar, wo der Spielcode in die Engine passt.

Keine Sorge: Ich habe professionell an Spielen gearbeitet, bei denen wir alle etwas verwirrt waren, wo der Spielcode in die Engine passt. ;)

Ich sage dies oft in der Spieleentwicklung, aber es gibt kein Standardsystem oder keine Definition dafür. Mit einigen Engines (normalerweise für recht einfache Spiele) können Sie neue Spiele erstellen, ohne mehr Code zu schreiben. Andere Engines sind im Grunde ein Grundgerüst eines vorhandenen Spiels, und Sie müssen den Code an Ort und Stelle ändern, um Ihre Funktionen hinzuzufügen. Einige ähneln Ihrem Beispiel und sind Sammlungen von Klassen, die Sie in Ihr eigenes System einordnen oder aggregieren können. Andere ähneln eher Codebibliotheken, die Sie Ihrer eigenen Anwendung hinzufügen und bei Bedarf verwenden. Das einzige, was sie gemeinsam haben, ist, dass die Engine der Teil des Systems ist, der für mehrere Spiele geeignet ist (oder behauptet, geeignet zu sein!).

Kylotan
quelle
3

Ich bin mir sicher, dass es Umstände gibt, unter denen die Leute so vorgegangen sind, wie Sie es oben getan haben, aber ich persönlich habe Engines immer als Sammlung von Bibliotheken bevorzugt, mit Bits, die Sie nach Bedarf abrufen können. Dies würde Ihnen letztendlich mehr Flexibilität bei der Auswahl geben, um verschiedene Komponenten basierend auf ihrer Eignung für einen bestimmten Spieltyp ein- und auszutauschen (dh Sie können je nach Spieltyp eine 2D- oder 3D-Physikbibliothek oder einen Renderer auswählen), ohne dies zu müssen Alle anderen Alternativen befinden sich im Speicher, oder Sie können zwischen einem auf DX9 / DX11 / etc basierenden Rendering wählen.

Roger Perkins
quelle
1
Dies steht nicht im Widerspruch zur besten Antwort. Sobald Sie Spiel 2 erstellt haben, sehen Sie doppelten Code, der in Bibliotheken abgerufen werden kann. Ich bevorzuge Bibliotheken von Drittanbietern, wo immer dies möglich ist (spart Arbeitsstunden)
ashes999