2013-12-08 2 views
0

Box2D предлагает физический движок для игр, который объединяет и моделирует и просматривает. Теперь я хочу использовать шаблон дизайна MVC или структуру на основе шаблона проектирования MVC, такого как Robotlegs of PureMVC, чтобы создать игру. Если я выберу Box2D, верно ли, что Box2D нарушает концепцию MVC? И если это правда, я должен волноваться?ли Box2D нарушает концепцию MVC?

ответ

3

Я не чувствую, что Box2D вообще нарушает концепцию MVC (пока мы говорим о Model-View-Controller здесь ... Я часто теряюсь в океане аббревиатуры;).

Физика часть модели. Не вся модель.

Рассмотрите моделирование ракеты в полете через двухмерный ландшафт (например, this). У «ракеты» есть модель того, как она движется. Частью этого является масса, момент инерции, скорость и т. Д. Это физическая часть моделирования.

У этого также есть своего рода «AI Code», чтобы решить, сколько силы применить, как превратить ракету и т. Д. Эти или часто называемые «рулевыми» силами. Это следующий уровень симуляции, «что-то движущееся».

Существует также большая часть модели, часть, которая решает, что делать, когда ракета попадает на что-то (что она получает от физики). Или когда стрелять ракета в первую очередь. Или маршрут, который должна пройти ракета.

Вы можете пойти еще выше, возможно, но точка, от которой уходит, заключается в том, что я ни разу не упомянул о том, как ракета отображается или представлена ​​пользователю. Это будет мнение.

Итак, мой взгляд на все это:

Модель (в слоях):

  1. ФИЗИКА
  2. ДВИЖЕНИЯ
  3. LOGIC И ОБОСНОВАНИЕ
  4. ОБЩИЙ SIMULATION или СТРАТЕГИЯ

Ни в коем случае нет в любом из них ... они действуют и существуют независимо от того, отображаются ли они в 2-D, 3-D или воздушными шарами, привязанными к бурундукам. Слои могут взаимодействовать друг с другом ... физика обнаруживает столкновение, которое вызывает изменение состояния в слое LOGIC AND REUSONING и т. Д.

Для полноты контроллер вводит пользователя в это. Пользователь «использует» контроллер для управления моделью. Я всегда чувствовал, что это было немного трудно думать; Мне нравятся конкретные примеры.

На уровне определения «жесткого ядра» пользователь использует контроллер для ввода ввода в модель. Поэтому я касаюсь экрана, и ракета знает, куда он должен лететь. Модель получает команду «идти сюда», и ИИ ракеты принимает эту команду и «бежит с ней».

С другой стороны, контроллер может также использоваться пользователем для управления представлением (которое не является частью определения «жесткого ядра» mvc). Рассмотрим планшетные приложения, где щепотка изменяет область просмотра, но сигналы крана ракета наносит удар «этой цели». Первый изменяет вид, а второй изменяет модель. ПРИМЕЧАНИЕ: Эта ситуация может быть проявлением более современных форм шаблонов, полученных из MVC, а не чистого MVC.

Независимо от того, что физика является частью модели, а не всей модели.

Было ли это полезно?

1

Нет, это не соответствует действительности, что Box2D перерывы MVC. Box2D не сочетает модель и взгляд, на самом деле, совсем наоборот. Box2D полностью агностик о том, что вы выбираете для рендеринга, поэтому он очень совместим с архитектурой MVC.

Игры концептуально сложны при рассмотрении MVC, поскольку модель имеет много параллелей с представлением (в отличие от бизнес-приложения). Тем не менее, вы по-прежнему получаете много преимуществ от разделения проблем в своей архитектуре.

Как Fuzzy говорит, Box2D является частью игровой модели.

MVC в игре выглядит следующим образом: enter image description here

Box2D будет получить завернутые в игре классов моделей. Ваша библиотека рендеринга (вы еще не сказали, на какой платформе вы пишете) будут обернуты в ваши классы View. Все элементы интерфейса находятся в ваших контроллерах.

Если вы хотите узнать больше о how to use MVC for HTML5 Games using Box2DWeb (for physics) with EaselJS (view) in CoffeeScript, I've written more about it here.

Смежные вопросы