MVC-подобная компартментализация в играх? [закрыто]

19

Я размышлял над дизайном игры (конкретно переводя настольную игру на компьютер, что, я полагаю, уместно в данном случае), и мне пришло в голову, что может иметь смысл построить «игру» отдельно от «дисплея».

Это позволило бы мне быстро прототипировать что-то с помощью простого текстового интерфейса, а потом доводить дело до конца. Это также позволило бы мне легче переносить игру на другие носители.

Распространен ли этот вид разделения в играх? Должен ли я попытаться сломать вещи дальше? Могу ли я пропустить осложнения?

Asmor
источник

Ответы:

7

Настольная игра - хороший пример игры, которая может быть сделана с использованием MVC, поскольку игровая логика (модель) существует совершенно независимо от визуальных эффектов (вид). Однако, если вы рассматриваете экшн-игру, подобную Gears of War, геометрия 3D-моделей является неотъемлемой частью игровой логики, поэтому разделение вида, как если бы оно было взаимозаменяемо, становится бессмысленным. Unity3D - отличный пример более специфичного для игры способа организации кода. У вас есть базовый класс сущностей, к которому вы добавляете функциональность с компонентами, где один компонент может обрабатывать рисование сущности, другой - игровую логику и т. Д. Посмотрите эти известные посты в блоге на эту тему:

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

http://gameprogrammingpatterns.com/component.html

Iain
источник
MVC может хорошо работать для FPS. См. Gamasutra.com/features/20050414/rouwe_01.shtml хотя бы для одной ссылки.
каменный металл
3
«... геометрия трехмерных моделей является неотъемлемой частью игровой логики ...» Таким образом, геометрия становится в первую очередь данными модели, чтобы ими манипулировал контроллер (в этом случае она влияет на физику, поэтому она существует со всей другой физикой параметры) для игровой логики. Если он также используется для представления, как в этом случае, то это считается вторичным, поскольку истинное моделирование - это контроллер, влияющий на модель; мнение не имеет значения. (Некоторые спорят о том, должны ли данные конфигурации существовать в модели; решать вам, но принцип остается тем же). Это пуристический подход.
инженер
5

Мой взгляд на это:

  • Модель , где большинство лжи данных и вся логика происходит.
    Он читает очередь входных событий и соответственно изменяет состояние игры.
    Затем он обрабатывает такие вещи, как физика и другие основные компоненты, которые также обновляют состояние игры.
    Loop. Это все.
    Цель состоит в том, чтобы сделать модель независимой: она не имеет никакой зависимости от вида или элементов контроллера: вы должны быть в состоянии создать программу, которая запускает только модель.
  • Вид просто читает игру состояние модели, обновляет свои собственные компоненты , посвященные представление данных, а также отображать вещи на экране.
    Он никогда ничего не записывает в модель, это процесс только для чтения, за исключением, может быть, регистрации какого-либо обработчика событий (например, «Эй, мистер Модель», когда вы обнаруживаете коллизию между этими двумя объектами, пожалуйста, вызовите мой обработчик событий, который воспроизводит звук!) «).
  • Контроллер ловит событие ввода и передает их в очередь ввода модели. Он читает представление (это нажатие кнопки происходило на кнопке пользовательского интерфейса?).

Таким образом, вы можете подключить поддельный контроллер, который читает файл, содержащий предварительно записанные входные события.
Также создайте простое представление, которое просто регистрирует вещи в файле.
Очень полезно для тестирования и отладки.

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

Splo
источник
0

Такое разделение - это разделение между движком и игровым кодом, и оно довольно распространено. По пути есть много места для абстракций.

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

Ziplin
источник
2
Это совсем не так. MVC определяет разделение состояния (модель) от пользовательского интерфейса (представление и контроллер). «Движок» - это общая структура, на которой могут быть построены игры, и может содержать базовые элементы для модели, представления и контроллера.
MikeWyatt