Staram się omijać projektowanie encji oparte na komponentach.
Moim pierwszym krokiem było stworzenie różnych komponentów, które można by dodać do obiektu. Dla każdego typu komponentu miałem menedżera, który wywoływałby funkcję aktualizacji każdego komponentu, przekazując rzeczy takie jak stan klawiatury itp. Zgodnie z wymaganiami.
Następną rzeczą, którą zrobiłem, było usunięcie obiektu i po prostu posiadanie każdego komponentu o identyfikatorze. Zatem obiekt jest definiowany przez komponenty mające te same identyfikatory.
Teraz myślę, że nie potrzebuję menedżera dla wszystkich moich komponentów, na przykład mam SizeComponent
, który ma tylko Size
właściwość). W rezultacie SizeComponent
nie ma metody aktualizacji, a metoda aktualizacji menedżera nic nie robi.
Moją pierwszą myślą było stworzenie ObjectProperty
klasy, którą komponenty mogłyby sprawdzać, zamiast mieć je jako właściwości komponentów. Obiekt miałby więc liczbę ObjectProperty
i ObjectComponent
. Komponenty miałyby logikę aktualizacji, która pyta obiekt o właściwości. Menedżer zarządzałby wywoływaniem metody aktualizacji komponentu.
Wydaje mi się to nadmierną inżynierią, ale nie sądzę, żebym mógł pozbyć się komponentów, ponieważ potrzebuję sposobu, aby menedżerowie wiedzieli, jakie obiekty potrzebują do uruchomienia logiki komponentów (w przeciwnym razie po prostu usunę komponent całkowicie i wrzuć logikę aktualizacji do menedżera).
- Jest to (o
ObjectProperty
,ObjectComponent
iComponentManager
klasach) over-inżynierii? - Jaka byłaby dobra alternatywa?
RenderingComponent
i a PhysicsComponent
. Czy zastanawiam się nad tym, gdzie umieścić nieruchomość? Czy powinienem po prostu go wsadzić, a następnie poprosić drugą kwerendę o obiekt dla komponentu, który ma wymaganą właściwość?
PhysicalStateInstance
(jeden na obiekt) obok GravityPhysicsShared
(jeden na grę); kusi mnie jednak, by powiedzieć, że zapuszcza się w sferę euforii architektów, nie buduj się w dziurze (dokładnie tak, jak to zrobiłem z moim pierwszym systemem komponentów). POCAŁUNEK.
SizeComponent
jest przesadą - możesz założyć, że większość obiektów ma rozmiar - to takie rzeczy, jak rendering, sztuczna inteligencja i fizyka, gdzie używany jest model komponentu; Rozmiar zawsze zachowuje się tak samo - dzięki czemu możesz udostępniać ten kod.