Welche Features gehören zur Engine und welche zu einem Spiel?

19

Momentan implementiere und teste ich neue Funktionen für meine 2D-Game-Engine, indem ich sie direkt in die Engine codiere. Gleichzeitig habe ich ein Showcase-Spiel mit Scripting-Unterstützung, das die Suchmaschinenfunktionen aufrufen soll. Ich füge zB der Entity-Klasse in der Engine eine feste Kachelbewegung hinzu, anstatt diese speziell für das Spiel zu schreiben. Dies ist definitiv ein Verstoß gegen die Idee einer allgemeinen Engine, die für mehr als ein Spiel verwendet wird.

Gibt es Best Practices, um sich weiterhin auf die korrekte Implementierung in den richtigen Teilen zu konzentrieren (das ist Engine vs. Spiel)?

Christian Ivicevic
quelle

Antworten:

25

Nun, es gibt ein paar Möglichkeiten, darüber nachzudenken. Eine besteht darin, die spezifischen Funktionen der Engine aufzulisten (was Sie hier gefragt haben). Die andere Möglichkeit besteht jedoch darin, Spiele zu erstellen, ohne sich über die "Engine" Gedanken zu machen, und dann werden Funktionen, die Sie finden, zwischen mehreren wiederverwendet Spiele (insbesondere die in jedem Spiel verwendeten Funktionen) sollten von der Quelle für ein bestimmtes Spiel in eine gemeinsam genutzte Codebasis namens "engine" migriert werden.

Denn letztendlich möchten Sie eine bestimmte Funktion in der Engine und nicht im Spiel haben, weil sie von mehreren Spielen gemeinsam genutzt wird. In der Regel sind dies Zeichenbefehle, Eingabecontroller und Netzwerkcode. Eine 2D-Game-Engine verfügt über viele 2D-Grafikfunktionen wie das Laden von Bildern, eine Anzeigehierarchie mit Z-Reihenfolge, das Verwalten von Spritesheets, das Tweening usw. Viele Spiele erfordern eine Physiksimulation, viele jedoch nicht. Mittlerweile werden in fast jedem Spiel mehr Dinge "unter der Haube" verwendet, darunter Timer, Ereignismeldungen und sogar mathematische Funktionen, die für die Spieleentwicklung spezifisch sind (z. B. distanceToTarget ()


Um es kurz zu machen:

A) Die Engine sollte Funktionen haben, die von den meisten Spielen gemeinsam genutzt werden.

B) Sie lernen, welche Funktionen gemeinsam genutzt werden, indem Sie eine Reihe von Spielen erstellen.

schockierend
quelle
7
+1 -just start making games without worrying too much about the "engine"
JCM
1
Naja just start making games without worrying too much about the "engine"ist auf jeden Fall ein netter Vorschlag.
Christian Ivicevic
3
Ich stimme den beiden obigen Kommentaren zu, aber die Bemerkung "Spiele einfach machen, ohne sich um die Engine zu kümmern" wurde aus dem Zusammenhang gerissen und ist ohne den Rest sinnlos: "Und dann werden Funktionen, die Sie finden, zwischen mehreren Spielen wiederverwendet (insbesondere Funktionen, die in jedem Spiel verwendet werden), sollten Sie von der Quelle für ein bestimmtes Spiel in eine gemeinsam genutzte Codebasis namens "engine" migrieren. Kurz gesagt, machen Sie so viele Spiele wie möglich, damit Sie wissen, was unter einer Engine und was nicht " t.
2
Dies ist eine großartige Idee, da Sie dadurch auch keine Engine-Funktionen implementieren können, die Sie in Ihren Spielen eigentlich nicht benötigen.
Zachary Yates
2
+1 für das Einhalten des Geistes der Dreierregel .
Joshua Drake