C ++: Проектирование системы сущностей на основе компонентов - сложные проблемы

В моем игровом движке, написанном на C ++, я ' Мы отошли от классической иерархической системы сущностей и построили систему на основе компонентов. Это работает примерно так:

Сущность - это просто контейнер для компонентов. Вот некоторые примеры компонентов: Point, Sprite, Physics, Emitter.

Каждая сущность может содержать не более одного компонента каждого типа. Некоторые компоненты зависят от других, например Physics и Sprite зависят от Point, потому что им нужна позиция и угол, предоставляемые им.

Итак, с системой компонентов все работает нормально, но теперь у меня проблемы с реализацией более специализированных объектов, например:

  • Камера, которой требуются дополнительные функции для управления движением и масштабированием
  • Плеер, которому требуется поддержка для получения ввода от пользователя и перемещения

Теперь я могу легко решить эту проблему с помощью наследования. Просто извлеките камеру из объекта и добавьте дополнительные функции и элементы масштабирования. Но это просто неправильно.

Мой вопрос:

  • Как я могу решить проблему специализированных сущностей с помощью компонентной системы на C ++?
12
задан Jarnstrom 25 February 2011 в 15:53
поделиться