Ich lese ein großartiges Buch, Game Coding Complete , und in diesem Buch wird die Verwendung des MVC- Ansatzes (Model-View-Controller) mit drei Schlüsselebenen dringend empfohlen :
- Game Application Layer
- Spielelogik
- Spielansicht
Für mich sieht dieser Ansatz wie ein Overkill für ein mobiles Computerspiel aus.
Was ist Ihre Meinung, bitte? Lohnt es sich, diese Architektur zu implementieren, auch wenn zusätzliche Kommunikation zwischen den Modulen erforderlich ist? Kann dieses Design so viel CPU-Leistung verbrauchen, dass das Ergebnis am Ende deutlich langsamer ausfällt, als wenn es nicht implementiert wäre?
architecture
Bunkai.Satori
quelle
quelle
Antworten:
Ich unterstütze die Verwendung einer MVC-Struktur sogar für ein einfaches Handyspiel. Wenn nichts anderes hilft es bei einem Problem, das Entwickler plagt, die nicht oft genug davon gebissen wurden: Trennen des Anzeigecodes von der Spielelogik.
Ich möchte jedoch auch darauf hinweisen, dass MVC wie alle Designmuster vorhanden ist , um Ihnen das Leben zu erleichtern . Das bedeutet , dass , wenn zu einem bestimmten Zeitpunkt, innerhalb eines bestimmten Reihe von Regeln zu bleiben , was Sie sollen und nicht tun sollten bei der Verwendung von MVC Ihr Leben schwerer machen, ignoriert es . Eines von zwei Dingen wird passieren: 1) Sie werden später gebissen und werden dann verstehen, warum eine andere Vorgehensweise Ihr Leben auf lange Sicht einfacher gemacht hätte, oder 2) überhaupt keine Konsequenzen.
Computerprogrammierung bringt von Natur aus eine Menge von Regelanhängern hervor, die das Festhalten an eleganten Prinzipien über das tatsächliche Erreichen von irgendetwas schätzen, und sie lieben es, ihr Wertesystem vorzuschlagen. Lass dich nicht zu einem von ihnen machen. Das Wichtigste, was Ihrem Spiel passieren kann, ist, es zu versenden .
quelle
Entwürfe zur Kompilierungszeit verbrauchen keine CPU-Leistung, es sei denn, Sie haben einen unglaublich unheilvollen Compiler. Eine objektorientierte Sprache oder Vorgehensweise unterscheidet sich in ihren Leistungsmerkmalen nicht von einer prozeduralen. Sie werden keinen zusätzlichen Aufwand für die Verwendung von MVC verursachen. Die Modularität tritt zur Kompilierungszeit auf, nicht zur Laufzeit. Sobald der Code integriert und optimiert ist, macht dies keinen Unterschied mehr.
In vielen modernen Spielen werden die Modelle und die Ansichten auf separaten Threads ausgeführt, und auf den meisten Plattformen werden große Leistungsvorteile erzielt.
Letztendlich ist MVC ein gutes Design, mit dem Sie mehr Wartung und weniger Fehler usw. kostenlos erhalten . Es gibt keinen Grund, es nicht zu benutzen. Es ist wie zu fragen, warum Sie eine
for
Schleife anstelle von handgeschriebenengoto
s verwenden sollten. Wenn Sie kein überlegenes Design im Sinn haben, ist es mit Sicherheit besser als nichts.Bearbeiten: Entwürfe zur Kompilierungszeit verbrauchen keine CPU-Leistung. Laufzeitdesigns wie die Vererbung sind offensichtlich ausreichend.
quelle
Es gibt fast immer einen Kompromiss zwischen der Klarheit des Codes und den technischen Anforderungen (Geschwindigkeit, Speicher usw.) des Programms. Objektorientierte Sprachen haben einen Overhead im Vergleich zu prozeduralen Sprachen, es hat sich jedoch gezeigt, dass sie viele Vorteile gegenüber prozeduralen Sprachen haben, insbesondere bei der langfristigen Pflege von Code (Bugs usw.) und häufig auch bei der Entwicklungsgeschwindigkeit.
Vor diesem Hintergrund schlage ich vor, dass es sich lohnt , MVC für Sie als Spielprogrammierer zu implementieren . Ihr Code wird besser objektorientierten Prinzipien folgen, insbesondere der Kapselung , und Sie werden es wahrscheinlich viel einfacher haben, ihn zu warten (Fehler zu beheben oder neue Funktionen hinzuzufügen).
Stellen Sie andererseits sicher, dass Sie ein Spiel tatsächlich beenden und nicht so viel Zeit damit verbringen, an der "Engine" zu arbeiten, dass sie niemals fertig wird.
Für weitere Informationen lesen Sie bitte die Frage "Warum werden MVC & TDD nicht mehr in der Spielearchitektur eingesetzt?" und meine wirklich lange Antwort.
quelle
a++
wird genau das gleiche sein wiea++
in C (woa
ist ein primitiver Typ, etc. etc.). Stellen Sie sich eine einfache C ++ - Klasse mit einer virtuellen Funktion vor, die etwas bewirkt. Diese virtuelle Funktion verursacht einen erheblichen Overhead im Vergleich zu einer einfachen C-Funktion, selbst wenn der innere Code identisch ist. Objektorientierte Sprachen haben einen Overhead . Entschuldigen Sie, dass Sie ausdrücklich "Geschwindigkeit" sagen. Wenn zusätzliche Speicherzuweisungen und dergleichen nicht zu einem langsameren Programm führen, haben Sie absolut Recht.