Wydaje się, że automaty stanowe powodują szkodliwe zależności w architekturach opartych na komponentach.
Jak w szczególności obsługiwana jest komunikacja między maszyną stanu a komponentami, które zachowują się w związku z tym stanem?
Gdzie jestem w:
- Jestem nowy w architekturze opartej na komponentach.
- Robię grę walki, choć nie sądzę, żeby to miało znaczenie. Widzę, że moja maszyna stanów jest używana do przełączania stanów, takich jak „kucanie”, „doskakiwanie”, „blokowanie” itp.
- Znalazłem tę technikę zarządzania stanem jako najbardziej naturalny system dla architektury opartej na komponentach, ale jest ona sprzeczna z technikami, o których czytałem: System dynamicznych obiektów obiektowych dla postaci o zmiennym zachowaniu Sugeruje to, że wszystkie komponenty aktywują / dezaktywują sami, stale sprawdzając warunek aktywacji.
- Myślę, że takie działania jak „bieganie” lub „chodzenie” mają sens jako stany, co nie zgadza się z przyjętą odpowiedzią tutaj: /gamedev//a/7934
Uznałem to za przydatne, ale dwuznaczne: jak zaimplementować zachowanie w architekturze gier opartych na komponentach? Sugeruje to posiadanie osobnego komponentu, który nie zawiera niczego poza maszyną stanu. Wymaga to jednak pewnego rodzaju sprzężenia między komponentem automatu stanów i prawie wszystkimi innymi komponentami. Nie rozumiem, jak należy traktować to połączenie. Oto niektóre domysły:
A. Komponenty zależą od maszyny stanu:
Komponenty otrzymują odwołanie do komponentów maszyny stanugetState()
, która zwraca stałą wyliczenia. Komponenty aktualizują się regularnie i sprawdzają to w razie potrzeby.B. Automat stanów zależy od komponentów: Komponent
automatu stanów otrzymuje odniesienia do wszystkich monitorowanych komponentów. Pyta ichgetState()
metody, aby zobaczyć, gdzie są.C. Jakaś abstrakcja między nimi
Używasz centrum zdarzeń? Wzorzec poleceń?D. Oddzielne obiekty stanu, które odwołują się do komponentów
Używany jest wzorzec stanu. Tworzone są osobne obiekty stanu, które aktywują / dezaktywują zestaw komponentów. Maszyna stanu przełącza się między obiektami stanu.Patrzę na komponenty jako implementacje aspektów . Robią wszystko, co jest potrzebne wewnętrznie, aby zrealizować ten aspekt. Wygląda na to, że komponenty powinny działać same, bez polegania na innych komponentach. Wiem, że niektóre zależności są konieczne, ale maszyny stanu wydają się kontrolować wszystkie moje komponenty.