Думая об общей игре, не имеет значения тип игры, очень вероятно, что нам нужен какой-то тип камеры. Например:
- Камера отладки: управляется клавиатурой и мышью, благодаря чему мы можем перемещаться в любом месте нашей сцены.
- Сценарий камеры: с этим мы можем дать команду камере двигаться по определенному пути.
- Камера плеера.
- ...
Каждый из этих типов камер имеет свою функцию обновления. Самая простая (и плохая) система - это иметь класс диспетчера камер с общей функцией обновления и специализированными функциями обновления для каждого типа камеры. Внутри общей функции обновления у нас есть оператор switch, который в зависимости от типа камеры вызывает соответствующую функцию обновления.
Вместо этого я подумал о другом подходе: шаблон стратегии. Мы перемещаем каждое поведение камеры (метод обновления) в соответствующий класс, который реализует общий интерфейс. В диспетчере камеры у нас есть член к этому интерфейсу, и мы можем динамически устанавливать любое поведение, которое мы хотим.
Что ты об этом думаешь? Какие еще системы вы мне предлагаете? Спасибо.
Дополнительная информация: есть реальная возможность, что мне нужно более одной активной камеры, например, для отражений. Короче говоря, я должен учитывать и это.
источник
Ответы:
Шаблоны стратегии кажутся мне хорошей ставкой. Чтобы сделать еще один шаг, ваш менеджер камеры должен оставаться в неведении о конкретных типах камер. Вы могли бы зарегистрировать и изменить реализации камеры внешне по идентификатору (я использовал гибкость строки, но мог быть также enum или int), например (без какой-либо проверки ошибок):
редактировать
Это тривиально, чтобы добавить. Просто измените
currentCamera
на:Измените
SetCamera
на ToggleCamera (или добавьте логическое значение для SetCamera, на ваш выбор):И измените
Update
метод для обновления всех активных камер вместо только текущей:В моем примере вам также необходимо заменить
View
свойствоGetView
методом, принимающим идентификатор камеры в качестве параметра. Но это деталь, которая все равно зависит от интерфейса вашей камеры:источник