Соответствует ли 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, который имеет слоистые изображения, частицы, различные свойства, такие как скорость, с которой должен перемещаться каждый слой, и открытые методы для запуска и остановки прокрутки фона.

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

Джереми
источник