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 SKAction
Kollisionserkennung 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?
ios
objective-c
spritekit
mvc
Skyler Lauren
quelle
quelle
Antworten:
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.
quelle
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.
quelle