Czy SpriteKit jest zgodny ze wzorem MVC?

11

Obecnie pracuję nad projektem iOS o nazwie Old Frank , w którym staram się podążać za wzorcem projektowym MVC.

Istota tego jest.

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

Teraz, jeśli dobrze rozumiem MVC, nie możesz korzystać z wielu funkcji, które oferuje SpriteKit, jeśli chcesz śledzić MVC. Na przykład wszelkie SKAction, wykrywanie kolizji itp.

Czy to nie zależy od modelu, w którym znajdują się obiekty gry i jak powinny reagować, dotykając innych obiektów? Czy określenie modelu w czasie nie zależy od modelu?

Czy są jakieś części SpriteKit, które można uznać za odpowiednie do użycia jako „widok” w MVC poza renderowaniem?

Skyler Lauren
źródło
„Próbowałem podążać za wzorem MVC” - dlaczego?
Paul D. Waite,
2
@ PaulD.Waite Podoba mi się pomysł oddzielenia mojego modelu. Teoretycznie ułatwia to portowanie lub odtwarzanie na innej platformie. Ułatwia także zarządzanie uporem, co do tej pory było największym powodem.
Skyler Lauren
Gotcha Aby osiągnąć cel trwałości, wzorzec pamiątkowy może być bardziej odpowiedni niż MVC. Twoje duszki mogą być pomysłodawcami i byliby odpowiedzialni za stworzenie zapisywalnej reprezentacji swojego stanu i późniejsze przywrócenie jej z tej reprezentacji. Kontroler sceny może być tym, co wymaga od nich reprezentacji.
Paul D. Waite,
Może to również spowodować, że twoje zapisane gry będą użyteczne na innej platformie, chociaż podejrzewam, że jest to tak daleko, jak możesz posunąć się pod względem możliwości przenoszenia podczas pracy z frameworkiem opartym tylko na Mac / iOS, takim jak SpriteKit.
Paul D. Waite,
1
@ PaulD. Poczekajcie, dziękuję za komentarze, przyjrzę się wzorowi memento jako kolejnemu wzorowi do rozważenia w przyszłości. Dwa pytania dotyczą tego samego projektu tak, ale nie są ze sobą powiązane. Zaskoczony widokiem drugiego z nich został przeniesiony do stackoverflow i jeszcze w nocy przyjrzy się swojej odpowiedzi =)
Skyler Lauren

Odpowiedzi:

6

Twoje pytanie jest dobre. Mam dokładnie to samo pytanie dotyczące SpriteKit i byłem bardzo zdezorientowany brakiem informacji na ten temat w Internecie. Wygląda na to, że SpriteKit zachęca cię do umieszczenia całego kodu Model-View-Controller w tej samej klasie (twojej podklasie SKScene), co jest dla mnie bardzo mylące. Jak zbudowałbyś grę o dowolnej złożoności, korzystając z tej techniki? Łączenie stanu gry (score, numLives itp.) Z kodem kontrolera, takim jak touchesBegan / Ended, i wyświetlanie renderowania w tej samej klasie jest naprawdę trudne do opanowania poza najprostszymi grami.

Zgadzam się, że użycie wzorca memento do pomocy w wytrwałości jest dobrym pomysłem, ale myślę również, że przejście na projekt MVC może być korzystne. Obecnie przenoszę swoją grę do architektury MVC. Moje obecne podejście polega na tym, aby mój model (obiekty gry) zarządzał obiektami fizycznymi, podklasa SKScene działała jako kontroler, a osobna klasa działała jako widok do konfigurowania i renderowania wizualnych aspektów SKNodes w scenie. Jestem dopiero w połowie procesu, więc nie mogę się upewnić, czy będzie to dobry projekt, ale wygląda na to, że będzie znacznie lepszy niż 10 000-liniowa podklasa SKScene.

John Cleveland
źródło
Dziękuję za twoją odpowiedź / komentarz. Wygląda na to, że czujesz, że korzystanie z funkcji SpriteKit również nie podąża za wzorami projektowymi MVC. Nie wahaj się napisz do mnie [email protected], jeśli masz pytanie dotyczące tego, w jaki sposób „używam” MVC lub chcesz dowiedzieć się więcej, w jaki sposób „używasz” MVC za pomocą SpriteKit =)
Skyler Lauren
Nic nie zmusza Cię do umieszczenia większości kodu w klasie SKScene. W rzeczywistości, gdy używam SpriteKit, większość logiki spada do Węzłów znacznie bardziej naturalnie niż Scena, ponieważ Węzły są głównym narzędziem SpriteKit. Scena to niewiele więcej niż „kontroler” do obsługi aktualizacji i wprowadzania danych w drzewie węzłów. Chociaż model „MVC” nadal nie pasuje do SpriteKit, ponieważ Węzły są zwykle „M” i „V”.
Attackfarm 16.04.15
1

Mówiąc najprościej, powszechnym projektem w grach SpriteKit są sceny, warstwy, węzły i węzły potomne.

Możesz przekształcić każdą część w dyskretną klasę, która zawiera wszystkie części, właściwości i metody.

Na przykład klasa tła, która ma warstwowe obrazy, cząstki, różne właściwości, takie jak szybkość, z jaką każda warstwa powinna się poruszać, oraz publiczne metody uruchamiania i zatrzymywania przewijania tła.

W tym projekcie łączysz te dyskretne klasy, które wykonują własną pracę w scenie, która głównie obsługuje bieżące aktualizacje: fizykę, zdarzenia dotykowe itp.

Jeremy
źródło