Я пытаюсь разобраться с компонентным дизайном сущностей.
Моим первым шагом было создание различных компонентов, которые можно было бы добавить к объекту. Для каждого типа компонента у меня был менеджер, который вызывал бы функцию обновления каждого компонента, передавая такие вещи, как состояние клавиатуры и т. Д. По мере необходимости.
Следующее, что я сделал, это удалил объект, и у каждого компонента был свой идентификатор. Таким образом, объект определяется компонентами, имеющими одинаковые идентификаторы.
Теперь я думаю, что мне не нужен менеджер для всех моих компонентов, например, у меня есть SizeComponent
, который просто имеет Size
свойство). В результате SizeComponent
метод обновления не имеет, а метод обновления менеджера ничего не делает.
Моей первой мыслью было создать ObjectProperty
класс, к которому компоненты могут обращаться, вместо того, чтобы иметь их как свойства компонентов. Таким образом, объект будет иметь число ObjectProperty
и ObjectComponent
. Компоненты будут иметь логику обновления, которая запрашивает у объекта свойства. Менеджер будет управлять вызовом метода обновления компонента.
Мне это кажется чрезмерной разработкой, но я не думаю, что смогу избавиться от компонентов, потому что мне нужен способ, чтобы менеджеры знали, для каких объектов нужна какая логика компонента (иначе я бы просто удалил компонент полностью и запихни свою логику обновления в менеджер).
- Это (имея
ObjectProperty
,ObjectComponent
иComponentManager
классы) сверхинжиниринг? - Что было бы хорошей альтернативой?
RenderingComponent
и a PhysicsComponent
. Я слишком обдумываю решение о том, где разместить недвижимость? Должен ли я просто вставить его в один, а затем запросить другой объект для компонента, который имеет необходимое свойство?
PhysicalStateInstance
(по одному на объект) вместе с GravityPhysicsShared
(по одному на игру); однако я испытываю желание сказать, что это входит в сферу эйфории архитекторов, не создавайте себе дыру (именно то, что я сделал с моей первой компонентной системой). ПОЦЕЛУЙ.
SizeComponent
излишне - вы можете предположить, что большинство объектов имеют размер - это такие вещи, как рендеринг, ИИ и физика, где используется компонентная модель; Размер всегда будет вести себя одинаково - так что вы можете поделиться этим кодом.