MVC oder Komponenten oder beides?


9

Ich bin ein erfahrener Entwickler, aber vor kurzem wollte ich in die Spielprogrammierung einsteigen, aber wie Sie wissen, ist die Spieleentwicklung ein ganz anderes Biest als die meisten anderen Programmierformen (vielleicht nur durch die Entwicklung von Betriebssystemen besiegt).

Davon abgesehen habe ich Game Coding Complete (ISBN 978-1-58450-680-5) von Mike McShaffry gelesen.

Ursprünglich wollte ich versuchen, mit einem Komponentenmodell mit einer Auswahl üblicher Komponenten (z. B. SpacialComponent, VisualComponent, EntityLogicComponent usw.) zu entwickeln. Herr McShaffry empfiehlt jedoch die Verwendung des MVC-Modells, das sehr attraktiv aussieht, aber ich bin mir nicht sicher, wie ich kann es mit dem Komponentenmodell funktionieren lassen, wenn es überhaupt möglich ist, aber ohne Komponenten sieht das MVC-Modell wie ein böses monolithisches Erbmonster aus und ist nicht sehr flexibel, was mich nicht wirklich interessiert.

Ich bin wirklich verwirrt darüber, wohin ich von diesem Punkt aus gehen soll.

Haben Sie erfahrenere Voodoo-Experten für Spielcodierung irgendwelche Gedanken oder Empfehlungen?

Ich danke dir sehr!


Diese Frage zu StackOverflow befasst sich mit komponentenbasiertem Design und kann Ihnen helfen.
Macke

Antworten:


6

Nützliche Fragen:

MVC (Model-View-Controller) Game Engine-Architektur - Ja oder Nein?

Warum werden MVC & TDD in der Spielearchitektur nicht mehr eingesetzt?

MVC-ähnliche Unterteilung in Spielen?

Für mich habe ich eine RenderComponent-Basisklasse und dann einige, die davon erben (GameSprite, UISprite oder wenn Sie 3D StaticModel, DynamicModel, BillboardModel usw. ausführen), und wenn das Objekt sich selbst rendern möchte, sendet das Objekt seine RenderComponent-Mitglied des Rendering-Systems. Das Rendering-System muss nicht wissen, welche Art von Objekt die RenderComponent gesendet hat. Es weiß nur, dass es etwas zu rendern hat und es ist besser, oder sonst!

Halten Sie es einfach und konzentrieren Sie sich eher auf die Komposition als auf die Vererbung. Das Trennen von Logik, Daten und Darstellung ist mit einem Komponentensystem nicht inkompatibel.


6

Ich würde empfehlen, Komponenten für Ihr erstes Spiel zu ignorieren, da sie einige Arten von Komplexität lösen, indem sie in anderen Bereichen mehr Komplexität hinzufügen. Wenn Sie noch kein Spiel erstellt haben, wissen Sie nicht, ob sich dieser Kompromiss lohnt oder nicht.

Lassen Sie sich jedoch größtenteils nicht in Programmierparadigmen festfahren und programmieren Sie einfach ein Spiel. Es gibt keine richtigen oder falschen Wege, sonst müsste niemand diese Art von Frage stellen. Arbeiten Sie es aus, während Sie fortfahren.


1
+1 für "Sie lösen einige Arten von Komplexität, indem sie in anderen Bereichen mehr Komplexität hinzufügen". Dies gilt für fast 99% der "Designmuster" oder sogar für die Technologie im Allgemeinen.
kizzx2

2

Ich würde kein striktes MVC-Muster verwenden, aber ich würde Ihr Rendering von Ihrer Simulation trennen und es auf einen anderen Thread kleben.

Ich denke, Komponenten sind tatsächlich sehr nützlich, aber ich sehe oft, dass Leute sie einfach ignorieren und ihren Code direkt in die "Haupt" -Komponente schreiben, was auch immer das sein mag. Sie müssen sich daran erinnern, dass Spiele voller Hacks sind, da diese häufig innerhalb einer Frist geschrieben werden, mit der Annahme, dass Code nicht wiederverwendet wird.

Ich bin ein wenig verwirrt darüber, warum Sie diese Ansätze für unvereinbar halten. Welchen Spielcode hast du dir angesehen?

Persönlich denke ich, dass Spiele ein gewisses Design erfordern. Ich habe ein paar Codebasen gesehen, die wegen der "Just-Code-It-Mentalität" Albträume waren.

Das heißt, ich denke, dass Sie einfach hineinspringen und ein Spiel codieren sollten. Sie werden beim Schreiben Ihres ersten Spiels so viele Fehler machen, dass diese Art von Problemen nicht viel ausmacht. Sobald Sie besser verstanden haben, was erforderlich ist, können Sie zurückgehen und sich die Architektur ansehen und sehen, wie sie die aufgetretenen Probleme löst.

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.