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?
ios
objective-c
spritekit
mvc
Skyler Lauren
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło