Folgt SpriteKit dem MVC-Muster?

11

Ich arbeite derzeit an einem iOS-Projekt namens Old Frank , bei dem ich versucht habe, einem MVC-Entwurfsmuster zu folgen.

Der Kern davon ist.

GameObjects(model) <- Scene(controller) -> Sprites "SpriteKit" (View)

Wenn ich MVC richtig verstehe, können Sie nicht viele der Funktionen von SpriteKit verwenden, wenn Sie MVC folgen möchten. Zum Beispiel SKActionKollisionserkennung usw.

Ist es nicht Sache des Modells, wo sich Spielobjekte befinden und wie sie reagieren sollen, wenn sie andere Objekte berühren? Ist es nicht Sache des Modells, den Ort im Laufe der Zeit zu bestimmen?

Gibt es Teile von SpriteKit, die als "Ansicht" in MVC verwendet werden können, außer dem Rendern?

Skyler Lauren
quelle
„Ich habe versucht, einem MVC-Entwurfsmuster zu folgen“ - warum?
Paul D. Waite
2
@ PaulD.Waite Ich mag die Idee, mein Modell getrennt zu halten. Dies erleichtert theoretisch das Portieren oder Neuerstellen auf einer anderen Plattform. Es macht es auch eine Menge einfacher, die Persistenz zu verwalten, was bisher der Hauptgrund war.
Skyler Lauren
Erwischt. Um das Persistenzziel zu erreichen, ist das Erinnerungsmuster möglicherweise besser anwendbar als MVC. Ihre Sprites könnten der Urheber sein, und sie wären dafür verantwortlich, eine speicherbare Darstellung ihres Zustands zu erstellen und sich später von dieser Darstellung wiederherzustellen. Ihr Szenen-Controller fordert möglicherweise die Darstellung von ihnen an.
Paul D. Waite
Dies könnte auch dazu führen, dass Ihre gespeicherten Spiele auf einer anderen Plattform verwendet werden können, obwohl ich vermute, dass dies in Bezug auf die Portierbarkeit bei der Arbeit mit einem Nur-Mac / iOS-Framework wie SpriteKit ungefähr so ​​weit geht.
Paul D. Waite
1
@ PaulD.Waite, danke für deine Kommentare. Ich werde das Erinnerungsmuster als ein weiteres Muster betrachten, das in Zukunft berücksichtigt werden soll. Die beiden Fragen beziehen sich zwar auf dasselbe Projekt, haben aber nichts miteinander zu tun. Überrascht zu sehen, dass der andere auf Stackoverflow migriert wurde und seine Antwort später am Abend noch genauer untersuchen wird =)
Skyler Lauren

Antworten:

6

Ihre Frage ist gut. Ich hatte genau die gleiche Frage zu SpriteKit und war sehr verwirrt über den Mangel an Informationen im Internet darüber. SpriteKit scheint Sie zu ermutigen, Ihren gesamten Model-View-Controller-Code derselben Klasse (Ihrer SKScene-Unterklasse) zuzuordnen, was für mich sehr verwirrend ist. Wie würden Sie jemals ein Spiel von beliebiger Komplexität mit dieser Technik bauen? Das Kombinieren des Spielstatus (Punktzahl, Anzahl, Leben usw.) mit Controller-Code wie touchBegan / Ended und das Rendern von Ansichten in derselben Klasse ist über die einfachsten Spiele hinaus sehr schwierig zu verwalten.

Ich bin damit einverstanden, dass die Verwendung des Erinnerungsmusters zur Unterstützung der Persistenz eine gute Idee ist, aber ich denke auch, dass die Umstellung auf ein MVC-Design von Vorteil sein könnte. Ich verschiebe mein Spiel derzeit in eine MVC-Architektur. Mein aktueller Ansatz besteht darin, dass mein Modell (Spielobjekte) die physikkörper verwaltet, die SKScene-Unterklasse als Controller fungiert und eine separate Klasse als Ansicht zum Konfigurieren und Rendern der visuellen Aspekte von SKNodes in der Szene fungiert. Ich bin nur ein Teil des Prozesses, kann also nicht sicher sagen, ob dies ein gutes Design sein wird, aber es scheint weitaus besser zu sein als eine Unterklasse mit 10.000 Zeilen von SKScene.

John Cleveland
quelle
Vielen Dank für Ihre Antwort / Kommentar. Klingt so, als ob Sie der Meinung sind, dass die Verwendung der Funktionen von SpriteKit auch nicht dem MVC-Designmuster entspricht. Bitte senden Sie mir eine E-Mail an [email protected], wenn Sie Fragen dazu haben, wie "ich" MVC verwende, oder wenn Sie näher darauf eingehen möchten, wie "Sie" MVC mit SpriteKit verwenden =)
Skyler Lauren
Nichts zwingt Sie dazu, den größten Teil Ihres Codes in die SKScene-Klasse aufzunehmen. Tatsächlich fällt bei der Verwendung von SpriteKit der größte Teil der Logik viel natürlicher auf die Knoten als auf die Szene, da die Knoten die Hauptlast von SpriteKit sind. Die Szene ist kaum mehr als der "Controller" für die Aktualisierung und Eingabe Ihres Knotenbaums. Obwohl das "MVC" -Modell immer noch nicht mit SpriteKit übereinstimmt, sind die Knoten in der Regel das "M" und das "V".
Attackfarm
1

In SpriteKit-Spielen sind Szenen, Ebenen, Knoten und untergeordnete Knoten ein gängiges Design.

Sie können jedes Teil zu einer diskreten Klasse machen, die alle Teile, Eigenschaften und Methoden kapselt.

Zum Beispiel eine Hintergrundklasse mit geschichteten Bildern, Partikeln, verschiedenen Eigenschaften wie der Geschwindigkeit, mit der sich jede Ebene bewegen sollte, und öffentlichen Methoden zum Starten und Stoppen des Bildlaufs im Hintergrund.

In diesem Entwurf setzen Sie diese diskreten Klassen, die ihre eigene Arbeit erledigen, in der Szene zusammen, die hauptsächlich das Ausführen von Updates:, Physik, Berührungsereignissen usw. übernimmt.

Jeremy
quelle