Помогите логически настроить слои для хорошего игрового дизайна (включая физику, музыку и игровую логику SpaceManager) - PullRequest
1 голос
/ 25 марта 2011

Я нахожусь в процессе создания своей первой игры для iPhone - у меня есть опыт работы в ООП и, в частности, в C ++, поэтому у меня возникли вопросы относительно того, как лучше всего логически настроить слои при сохранении функциональности.

В настоящее время яХОЧУ, чтобы в моей игре было три основных слоя:

  • HUDLayer (все статические объекты на экране здесь - элементы управления игрой, пользовательский счет, кнопка паузы и т. Д.)
  • PlayLayer (TheИгрок, основной игровой цикл и вся игровая логика здесь)
  • Уровень слоя (Изображения уровней и объекты уровня физики, с которыми взаимодействует игрок, и фоновая музыка, характерная для этого уровня)

Обратите внимание, что здесь я использовал слово ХОЧУ - потому что для моей жизни мне постоянно приходится перемещать логические объекты, чтобы работать внутри того, что представляется структурой Cocos2d и spacemanagers.

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

  • Я бы хотел, чтобы мой PlayLayer был сценой, загружаемой director - но если я сделаю это, то все объекты HUDLayer будут закрыты за PlayLayer и не останутся на месте, как они должны, поэтому HUDLayer - это моя сцена, и мне пришлось сделать это просто для того, чтобы заставить ее работать
  • Я бы хотел воспроизвести фоновую музыку (через simpleAudioEngine playBackgroundMusic) в слое LEVEL, потому что я хочу, чтобы на разных уровнях была разная музыка.До сих пор единственный способ получить фоновую музыку для работы - это поместить ее в самый верхний слой, то есть в этом случае HUDLayer
  • Из-за того, что мне нужно использовать экземпляр объекта SpaceManagerCocos2d для созданияфизические тела - кажется, что мой уровень должен быть убит и просто включен в мой PlayLayer, иначе у меня будет кошмар времени, когда я пытаюсь обнаружить столкновения между игроком и уровнем.

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

У кого-нибудь еще есть такие проблемы?Я неправильно подхожу к архитектуре игры?Буду признателен за любую помощь.

Заранее спасибо, ребята!

1 Ответ

4 голосов
/ 19 апреля 2011

Ну, каждая игра отличается. Есть много хороших обсуждений на форумах cocos2d по поводу архитектуры , некоторые люди предпочитают использовать подход MVC, некоторые, например, используют метафору Actor для содержания физических объектов и т. Д.

Вот мой подход:

  1. Используйте два CCLayer объекта (GameLayer и HUDLayer) в качестве дочерних узлов одного CCScene (GameScene). Это объекты «просмотра».
  2. Создать GameController синглтон, который может вносить изменения в состояние игры (также хранится в GameController или в отдельном файле.) Вы также можете создать подкласс CCScene и назвать его своим контроллером.
  3. GameLayer отвечает за рендеринг графики уровня игры и всех действующих лиц в ней; он также обрабатывает ввод игры через сенсорные события.
  4. HUDLayer размещается с более высоким z-индексом, чем GameLayer, и, очевидно, содержит все объекты CCSprite для HUD и кнопок.
  5. Взаимодействие между HUDLayer и GameLayer управляется через GameController.
  6. GameController выполняет все изменения состояния и игровые действия.

Это только мой подход, потому что он работал для моей текущей игры, и это ни в коем случае не является окончательным ответом.

Я бы посоветовал вам использовать Actor парадигму для ваших физических объектов - SpaceManager делает достойную работу, но вы не всегда хотите, чтобы физические объекты расширяли CCSprite.

...