Próbuję zaprojektować oparty na komponentach system encji do celów uczenia się (a później używać go w niektórych grach) i mam problemy z aktualizacją stanów encji.
Nie chcę mieć metody update () wewnątrz komponentu, aby zapobiec zależnościom między komponentami.
Mam na myśli to, że komponenty przechowują dane i aktualizują systemy.
Tak więc, jeśli mam prostą grę 2D z niektórymi bytami (np. Gracz, wróg1, wróg2), które mają komponenty transformacji, ruchu, stanu, animacji i renderowania, myślę, że powinienem:
- MovementSystem, który przenosi wszystkie komponenty Movement i aktualizuje komponenty State
- A RenderSystem, który aktualizuje komponenty animacji (komponent animacji powinien mieć jedną animację (tj. Zestaw ramek / tekstur) dla każdego stanu, a jej aktualizacja oznacza wybranie animacji odpowiadającej bieżącemu stanowi (np. Skakanie, poruszanie się w lewo itp.), Oraz aktualizacja indeksu ramki). Następnie RenderSystem aktualizuje komponenty Renderowania teksturą odpowiadającą bieżącej ramce animacji każdego elementu i renderuje wszystko na ekranie.
Widziałem niektóre implementacje, takie jak framework Artemis, ale nie wiem, jak rozwiązać tę sytuację:
Powiedzmy, że moja gra ma następujące byty. Każda jednostka ma zestaw stanów i jedną animację dla każdego stanu:
- gracz: „bezczynny”, „moving_right”, „jumping”
- wroga1: „moving_up”, „moving_down”
- wroga2: „moving_left”, „moving_right”
Jakie są najbardziej akceptowane metody aktualizacji aktualnego stanu każdego podmiotu? Jedyne, co mogę wymyślić, to mieć osobne systemy dla każdej grupy podmiotów oraz osobne komponenty stanu i animacji, aby mieć PlayerState, PlayerAnimation, Enemy1State, Enemy1Animation ... PlayerMovementSystem, PlayerRenderingSystem ... ale myślę, że to źle rozwiązanie i łamie cel posiadania systemu opartego na komponentach.
Jak widać, jestem tu całkiem zagubiony, więc bardzo doceniłbym każdą pomoc.
EDYCJA: Myślę, że rozwiązaniem, które sprawi, że będzie działać tak, jak zamierzam, jest to:
Sprawiasz, że statecomponent i animationcomponent są wystarczająco ogólne, aby można je było stosować dla wszystkich jednostek. Zawarte w nich dane będą modyfikatorem do zmiany rzeczy, takich jak odtwarzane animacje lub dostępne stany. - Bajt56
Teraz próbuję wymyślić, jak zaprojektować te 2 komponenty na tyle ogólne, aby móc je ponownie wykorzystać. Czy posiadanie identyfikatora UID dla każdego stanu (np. Chodzenie, bieganie ...) i przechowywanie animacji na mapie w komponencie animacji kluczowanym przez ten identyfikator może być dobrym rozwiązaniem?
statecomponent
i animationcomponent
tyle ogólne, które mają być stosowane do wszystkich podmiotów. Zawarte w nich dane będą modyfikatorem do zmiany rzeczy, takich jak odtwarzane animacje lub dostępne stany.