Я намагаюсь обернутись дизайном сукупності на основі компонентів.
Першим моїм кроком було створення різних компонентів, які можна було б додати до об'єкта. Для кожного типу компонентів у мене був менеджер, який би викликав функцію оновлення кожного компонента, передаючи такі речі, як стан клавіатури і т.д.
Наступне, що я зробив - це видалити об'єкт і просто мати кожен компонент з ідентифікатором. Отже, об'єкт визначається компонентами, що мають однакові Ідентифікатори.
Тепер я думаю, що мені не потрібен менеджер для всіх моїх компонентів, наприклад, у мене є SizeComponent
, який просто має Size
властивість). В результаті у SizeComponent
нього немає методу оновлення, а метод оновлення менеджера нічого не робить.
Моя перша думка полягала в тому, щоб створити ObjectProperty
клас, до якого компоненти могли б запитувати, а не мати їх як властивості компонентів. Так об'єкт мав би кількість ObjectProperty
і ObjectComponent
. Компоненти матимуть логіку оновлення, яка запитує об’єкт щодо властивостей. Менеджер керує викликом методу оновлення компонента.
Це здається мені надмірною інженерією, але я не думаю, що я можу позбутися компонентів, тому що мені потрібен спосіб, щоб менеджери могли знати, для яких об’єктів потрібна логіка компонента для запуску (інакше я просто видалю компонент повністю і натисніть її логіку оновлення в менеджер).
- Є чи це (маючи
ObjectProperty
,ObjectComponent
іComponentManager
класи) більш-інженерії? - Яка б була хороша альтернатива?
RenderingComponent
і a PhysicsComponent
. Чи я надмірно замислююся над рішенням, де розмістити майно? Чи повинен я просто вставити його в будь-який, а потім інший запит об'єкта для компонента, який має необхідну властивість?
PhysicalStateInstance
(один на предмет) поряд із GravityPhysicsShared
(один на гру); однак я маю на думці сказати, що це впадає у сфери ейфорії архітекторів, не зодчіть себе в норі (саме те, що я зробив зі своєю першою складовою системою). KISS.
SizeComponent
є надмірним - можна припустити, що більшість об'єктів мають розмір - це такі речі, як візуалізація, AI та фізика, де використовується компонентна модель; Розмір завжди буде поводитися однаково - тому ви можете поділитися цим кодом.