Какой шаблон дизайна использовать для 2D-игры для iPhone? - PullRequest
3 голосов
/ 17 мая 2011

Чтобы немного рассказать об игре: падающие предметы плавают сверху, и цель состоит в том, чтобы щелкнуть / сдвинуть другой объект, чтобы поразить их. Если предмет падает на землю, вы теряете жизнь и получаете очки за попадание падающих предметов.

Здесь я немного растерялся. В разработке игр для iPhone от O'Reilly. Они утверждают, что AppDelegate наследуют объект игрового автомата, и имеют основной игровой цикл в Делегат приложения. Ничего о MVC.

Я собирался использовать MVC. У меня есть все объекты, идентифицированные для моделей, и я собирался использовать один контроллер для обновления каждой модели и их соответствующего представления. Затем подключите контроллер приложений в приложении «Делегат» и переместите определенные контроллеры («Воспроизведение», «Инструкции», «Статистика») с главного экрана. Затем запустите игровой цикл в моем gameViewController. Кстати, я использую Бурундук в качестве физического движка.

Это моя первая игра, поэтому я немного растерялся. Буду очень признателен за любые советы о том, как действовать. Я хотел бы получить объектно-ориентированный дизайн с самого начала, прежде чем переходить к коду.

Ответы [ 3 ]

7 голосов
/ 17 мая 2011

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

Взгляните на этот пост на gameDev. Множество полезных шаблонов от людей умнее, чем я.

https://gamedev.stackexchange.com/questions/4157/what-are-some-programming-design-patterns-that-are-useful-in-game-development

1 голос
/ 17 мая 2011

Мой MVC работает примерно так.Каждый игровой объект, который создает, представляет собой только одну модель.Пустые данные без логики.Когда объект создан, он также получает мозг или контроллер, прикрепленный к нему.Каждый созданный мозг добавляется в список мозга.Список мозга обновляет каждый мозг, а мозг меняет модель.

Чтобы показать что-то на экране, мозг добавляет модель в сцену.Сцена хранит список всех моделей, которые она отображает.Сцена также обновляется из игрового цикла.Каждому обновлению, которое Сцена просматривает для каждой Модели, любой модели без Представления дается представление (новое представление создается на основе данных в модели).Сцена затем отслеживает вид, пока данные Модели не скажут, что он больше не нужен.

Когда я работаю над iPhone, мне нравится разбивать игровой цикл на собственную нить.Те люди в О'Рейли довольно умны, хотя, возьмите то, что я должен сказать, с долей соли.

[NSThread detachNewThreadSelector:@selector(GameLoop:) toTarget:self withObject:nil];

Затем сам игровой цикл обновляет сначала «Мозги» (или «Список контроллеров»), затем «Сцену» (или «список просмотра»).

Последняя часть, которая связывает еговсе вместе это вход.Для iPhone я использую полноэкранный режим просмотра.В touchesBegan и touchesEnd представления я генерирую события, которые я передаю InputManager.InputManager будет отправлять события различным моделям по мере необходимости.

0 голосов
/ 17 мая 2011

Не считаете ли вы, что игровой автомат является своего рода моделью данных? У меня нет упомянутой вами книги О'Рейли, но описание, которое вы даете мне, звучит очень похоже на MVC.

Суть MVC заключается в том, чтобы отделить контент приложения от способа отображения контента на экране. «Модель» в MVC не обязательно должна состоять из тупых объектов данных, которые вы считываете из файла или веб-сервера ... это также может быть симуляция, соединение с другим устройством и т. Д. Я так думаю это то, что модель - это та часть, которую вы сохранили бы, если бы собирались выбросить графический интерфейс приложения и заменить его скриптом, интерфейсом командной строки или, возможно, веб-службой. Игровой автомат может вполне соответствовать этому описанию.

В приложении для iOS нередко бывает, что делегат приложения создает экземпляр модели. Затем у вас есть контроллеры представления, которые знают, как общаться с моделью и преобразовывать данные, которые она предоставляет, во что-то, что может быть отображено в представлениях. Если некоторые данные, которые предоставляет модель, являются графическими элементами, такими как текстуры или сетки, то ничего страшного ... в конце концов, это те данные, на которых работает игра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...