Система, основанная на компонентах, обычно имеет общий метод, позволяющий отправлять «сообщения» объектам, например, функцию send(string message_type, void* data)
. Затем объект передает его всем его компонентам, и только некоторые из них будут реагировать на него. Например, ваш компонент Point
может реагировать на send("move", &direction)
. Или вы можете ввести компонент moveable
, чтобы иметь больше контроля. То же самое для вашей камеры, добавьте компонент view
и сделайте так, чтобы он обрабатывал сообщение «zoom».
Эта модульная конструкция уже позволяет определять различные типы камер (например, стационарные, не имеющие компонента moveable
), повторно использовать какой-либо компонент для других вещей (другой тип объекта может использовать «представление»), и вы также получить гибкость, имея различные компоненты, обрабатывающие каждое сообщение по-разному.
Конечно, могут потребоваться некоторые приемы оптимизации, особенно для часто используемых сообщений.