Chyba zdecydowałem, że naprawdę lubię programy obsługi zdarzeń. Być może cierpię z powodu paraliżu analizy, ale martwię się, że mój projekt będzie niewygodny lub napotkam jakieś inne nieprzewidziane konsekwencje moich decyzji projektowych.
Mój silnik gry obecnie wykonuje podstawowe renderowanie oparte na ikonkach za pomocą panoramowanej kamery. Mój projekt wygląda trochę tak:
SceneHandler
Zawiera listę klas, które implementują interfejs SceneListener (obecnie tylko Sprites). Wywołuje render () raz na tyknięcie i wysyła onCameraUpdate (); wiadomości do SceneListeners.
InputHandler
Sonduje dane wejściowe raz na tyknięcie i wysyła prosty komunikat „onKeyPressed” do InputListeners. Mam Camera InputListener, który przechowuje instancję SceneHandler i wyzwala updateCamera (); zdarzenia oparte na danych wejściowych.
AgentHandler
Wywołuje domyślne akcje na dowolnych agentach (AI) raz na tyknięcie i sprawdzi stos pod kątem wszelkich nowych zarejestrowanych zdarzeń, wysyłając je do określonych agentów w razie potrzeby.
Mam więc podstawowe obiekty sprite, które mogą poruszać się po scenie i używać podstawowych funkcji sterowania podczas podróży. Wykryłem kolizję i nie jestem pewien, czy kierunek, w którym zmierza mój projekt, jest dobry. Czy dobrą praktyką jest posiadanie wielu małych programów obsługi zdarzeń? Wyobrażam sobie, że jestem taki, że musiałbym wdrożyć jakiś CollisionHandler.
Czy lepiej byłoby, gdyby był bardziej skonsolidowany EntityHandler, który obsługuje sztuczną inteligencję, aktualizacje kolizji i inne interakcje bytu w jednej klasie? Czy też będę w porządku po prostu wdrażając wiele różnych podsystemów obsługi zdarzeń, które przesyłają sobie komunikaty w zależności od rodzaju zdarzenia? Czy powinienem napisać EntityHandler, który jest po prostu odpowiedzialny za koordynację wszystkich tych procedur obsługi zdarzeń podrzędnych?
W niektórych przypadkach, takich jak InputHandler i SceneHandler, zdaję sobie sprawę, że są to bardzo specyficzne typy zdarzeń. Duża część mojego kodu gry nie będzie dbała o dane wejściowe, a duża część nie będzie dbała o aktualizacje, które będą miały miejsce wyłącznie podczas renderowania sceny. Dlatego uważam, że moja izolacja tych systemów jest uzasadniona. Zadaję jednak to pytanie konkretnie w związku ze zdarzeniami typu logika gry.