2012-04-08 2 views
2

Я разрабатываю игру-изгоев (iOS/Cocos2d). У меня есть объект класса Map, у которого есть куча GameObjects.Дизайн уведомления об изменениях модели в игре iOS

У меня есть класс GameViewController. Когда что-то происходит в модели (труп убит, игрок перемещается, что угодно), мне нужно уведомить GameViewController об этих изменениях. Как это сделать?

Я вижу два варианта:

  1. экземпляр GameViewController может быть делегатом Карта и делегат каждого GameObject.
  2. GameViewController будет прослушивать NSNotifications из Map и GameObjects.

Какой способ лучше? Зачем?

+0

Нужно ли GameViewController знать о каждом GameObject? Карта содержит GameObjects, поэтому она может наблюдать за ними (быть делегатом, слушать уведомления или давать указатель на себя в GameObjects) и, в свою очередь, передавать эти сообщения классу GameViewController (еще раз используя любой из этих трех техники). – Dondragmer

ответ

0

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

Ваш второй вариант, как правило, более разумный и безопасный подход для любой программы, а не только для Cocos. NSNotifications позволяет вам уведомлять объекты из других объектов, не попадая в потенциально ошибочное состояние передачи многочисленных ссылок или синглетов в вашей программе. Если вы можете достичь своих целей несколькими уведомлениями, это путь.

Если вы обнаружите, что используете NSNotifications в экстремальной степени, например, несколько уведомлений каждую секунду, то вам следует рассмотреть либо передачу ссылок между вашими объектами с помощью указателей, либо создание родительского класса или основного класса сцены Cocos в качестве одноэлементного.

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

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