Чувствовать себя постоянно
передать 4-5 вещей на мои занятия,
особенно в моем сценарии сейчас, где
почти каждый внутриигровой объект у меня есть
нужен экран, физика, информация о камере,
и т.п.
Тогда правильный вопрос: «зачем мне все 5 объектов во всех моих классах?»
Почему на Земле каждый объект в gmae нуждается в какой-либо из упомянутых вещей? Игровому объекту нужна позиция и все, что ему нужно для обработки своего поведения. Тогда отдельный рендерер может, вы знаете, визуализировать объект. Это означает, что только визуализатор нуждается в информации и экране камеры.
Физика может пойти в любую сторону. У вас может быть отдельный физический объект, который обновляет игровой объект, или вы можете передать этот физический объект каждому игровому объекту. Но даже если вы передадите это, мы дошли до одного из трех перечисленных объектов. :)
Вот почему глобалы и синглтоны часто лучше избегать. Они маскируют ваши зависимости, так что вы получите гораздо больше зависимостей между вашими объектами, чем вам действительно нужно. И тогда становится почти невозможно удалить глобалы.
Однако, если вы придерживаетесь глобалов, сделайте себе одолжение и, по крайней мере, избегайте одиночных игр. Вам не нужны дополнительные ограничения, навязанные синглтоном.
Местность хочет получить доступ к основным классам
Экран объекта, чтобы он мог добавить свой
Графика местности на экран. Это
также хочет знать о камере
объект, когда он рисует так
знает, в каком масштабе его нарисовать. Это также
хочет знать о моем PhysicsWorld
объект, чтобы он мог добавить себя в
физический движок.
Объект местности должен знать одну вещь: какова местность. Кто-то другой может взять на себя ответственность за это. Кто-то должен знать о камере, экране и графике местности, что говорит о том, что тот же объект может правдоподобно выполнять другие задачи, связанные с этими объектами (например, другие задачи рендеринга).
Почему ландшафт должен заботиться о том, в каком масштабе он нарисован? Нужно знать масштаб игры, а не масштаб в пространстве камеры. И почему кто-то еще не может добавить местность к физическому движку? Основная функция может сделать это даже. Создайте ландшафт, создайте физический движок, зарегистрируйте ландшафт с помощью физического движка, запустите игру.