Соответствует ли SpriteKit шаблону MVC?


11

В настоящее время я работаю над iOS-проектом под названием Old Frank, который я пытаюсь следовать шаблону проектирования MVC.

Суть этого есть.

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

Теперь, если я правильно понимаю MVC, вы не сможете использовать множество функций, которые может предложить SpriteKit, если вы хотите следовать MVC. Например SKAction, обнаружение столкновений и т. Д.

Разве это не зависит от модели, в которой расположены игровые объекты, и как они должны реагировать при касании других объектов? Разве это не зависит от модели, чтобы определить местоположение с течением времени?

Существуют ли какие-либо части SpriteKit, которые можно было бы использовать как «представление» в MVC, кроме рендеринга?


«Я пытался следовать шаблону проектирования MVC» - почему?
— Пол Д. Уэйт

2
@ PaulD.Waite Мне нравится идея держать свою модель отдельно. Теоретически это облегчает перенос или воссоздание на другой платформе. Это также облегчает управление постоянством, которое до сих пор было главной причиной.
— Скайлер Лорен

Попался. Чтобы достигнуть цели постоянства, образец сувенира мог бы быть более применимым, чем MVC. Ваши спрайты могут быть инициаторами, и они будут нести ответственность за создание сохраняемого представления своего состояния и восстановление себя из этого представления позже. Ваш контроллер сцены может быть тем, что запрашивает представление у них.
— Пол Д. Уэйт

Это также может привести к тому, что ваши сохраненные игры будут использоваться на другой платформе, хотя я подозреваю, что это примерно настолько, насколько вы можете использовать возможности портов при работе с платформой для Mac / iOS, такой как SpriteKit.
— Пол Д. Уэйт

1
@ PaulD.Waite, спасибо за ваши комментарии. Я буду рассматривать шаблон памятного подарка как еще один шаблон для рассмотрения в будущем. Эти два вопроса касаются одного и того же проекта, но они не связаны. Удивлен, увидев, что другой был перенесен в stackoverflow и рассмотрит его ответ немного позже сегодня вечером =)
— Скайлер Лорен

Ответы:


6

Ваш вопрос хороший. У меня был точно такой же вопрос относительно SpriteKit, и я был очень озадачен отсутствием информации в Интернете по этому поводу. SpriteKit, кажется, призывает вас поместить весь код Model-View-Controller в один класс (ваш подкласс SKScene), что меня действительно смущает. Как бы вы создали игру любой сложности, используя эту технику? Сочетание состояния игры (партитура, numLives и т. Д.) С кодом контроллера, например touchesBegan / Ended, и рендеринг вида в одном и том же классе становится действительно трудным для управления, помимо самых простых игр.

Я согласен с тем, что использование паттерна сувениров для помощи с постоянством - хорошая идея, но я также думаю, что переход на дизайн MVC может быть полезным В настоящее время я перевожу свою игру в архитектуру MVC. Мой текущий подход заключается в том, чтобы моя модель (игровые объекты) управляла физическими телами, подкласс SKScene выступал в качестве контроллера, а отдельный класс - в качестве представления для настройки и визуализации визуальных аспектов узлов SKN в сцене. Я только частично прохожу этот процесс, поэтому не могу с уверенностью сказать, будет ли это хороший дизайн, но кажется, что он будет намного лучше, чем иметь подкласс из 10 000 строк в SKScene.


Спасибо за ваш ответ / комментарий. Похоже, вы чувствуете, что использование функций SpriteKit не следует паттерну дизайна MVC. Не стесняйтесь писать мне по электронной почте skyler@skymistdevelopment.com, если у вас есть вопрос о том, как «я» использую MVC, или вы хотите более подробно рассказать о том, как «вы» используете MVC с SpriteKit =)
— Скайлер Лорен

Ничто не заставляет вас помещать большую часть кода в класс SKScene. На самом деле, я обнаружил, что при использовании SpriteKit большая часть логики падает на узлы гораздо естественнее, чем сцена, так как узлы являются основной причиной SpriteKit. Сцена - это немного больше, чем «Контроллер» для обработки обновлений и ввода для вашего дерева узлов. Хотя модель "MVC" по-прежнему не соответствует SpriteKit, поскольку узлами, как правило, являются "M" и "V".
— Attackfarm

1

Проще говоря, общий дизайн в играх SpriteKit - сцены, слои, узлы и дочерние узлы.

Вы можете превратить каждую часть в отдельный класс, который инкапсулирует все части, свойства и методы.

Например, класс Background, который имеет слоистые изображения, частицы, различные свойства, такие как скорость, с которой должен перемещаться каждый слой, и открытые методы для запуска и остановки прокрутки фона.

В этом проекте вы собираете эти отдельные классы, которые выполняют свою работу, в сцену, которая в основном обрабатывает обновление: физику, сенсорные события и т. Д.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.