Как сделать прохождение класса через несколько классов? - PullRequest
0 голосов
/ 07 января 2012

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

После этого менеджер сцены создается и инициализирует первую сцену.

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

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

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

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

Есть ли лучший способ сделать это? Как обычно это делается?

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 января 2012

Самый распространенный способ сделать это - синглтон. Только потому, что это распространено, не значит, что это лучший способ.

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

0 голосов
/ 07 января 2012

Имейте синглтон class Root, который содержит всех менеджеров.Во время инициализации объект Root создает все менеджеры.Затем вы можете добавить функции get для всех менеджеров.

Это работает очень хорошо, потому что из любого места в коде вы можете вызвать

Root::getPtr()->getTextureManager()->whatever()
0 голосов
/ 07 января 2012

Для глобальных доступных функций и данных я бы порекомендовал вам шаблон синглтона. Если вам нужны разные данные для разных сцен, вам следует рассмотреть возможность использования мульти-синглтона (передать строки в функцию getInstance) или написать интерфейс, который имеет функции для доступа к данным по строкам / именам, таким как класс Property в java.

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