В моем игровом движке, написанном на С++, я отошел от классической иерархической системы сущностей и создал компонентную систему. Он работает примерно так:
Сущность - это просто контейнер для компонентов. Некоторые примеры компонентов: Point, Sprite, Physics, Emitter.
Каждый объект может содержать не более одного компонента каждого типа. Некоторые компоненты зависят от другого, как Физика и Спрайт зависят от Точки, потому что им нужна позиция и угол, поставленные им.
Итак, все работает отлично с системой компонентов, но теперь мне трудно реализовать более специализированные объекты, например:
- Камера, для которой необходимы дополнительные функции для управления перемещением и масштабированием.
- Игрок, которому нужна поддержка для получения ввода от пользователя и перемещения
Теперь я мог бы легко решить это с наследованием. Просто выведите камеру из объекта и добавьте дополнительные функции масштабирования и элементы. Но это просто неправильно.
Мой вопрос:
- Как я могу решить проблему специализированных объектов с компонентной системой в С++?