Напевно, я вирішив, що мені дуже подобаються обробники подій. Я, можливо, трохи страждаю від паралічу аналізу, але я стурбований тим, щоб зробити свій дизайн непростим або наштовхнутись на якісь інші непередбачені наслідки моїх дизайнерських рішень.
В даний час мій ігровий двигун виконує базовий спрайт-рендерінг за допомогою панорамної накладної камери. Моя конструкція виглядає приблизно так:
SceneHandler
Містить список класів, які реалізують інтерфейс SceneListener (на даний момент лише Sprites). Виклики render () один раз за галочку та надсилає onCameraUpdate (); повідомлення для слухачів сцени.
InputHandler
Опитує вхід один раз за галочку та надсилає просте повідомлення "onKeyPress" на InputListeners. У мене є Camera InputListener, який містить примірник SceneHandler і запускає updateCamera (); події на основі того, що є вхідним даних.
AgentHandler
Викликає дії за замовчуванням для будь-яких агентів (AI) один раз за галочку та перевірятиме стек для будь-яких нових подій, які реєструються, надсилаючи їх конкретним Агентам у міру необхідності.
Тож у мене є основні спрайтові об’єкти, які можуть переміщатися по сцені і використовувати рудиментарну поведінку рульового управління для подорожі. Я потрапив на виявлення зіткнень, і саме тут я не впевнений, що напрямок моєї конструкції іде добре. Чи є хорошою практикою мати багато маленьких обробників подій? Я уявляю, що я йду таким, яким я є, що мені довелося б реалізувати якийсь CollisionHandler.
Чи краще мені з більш консолідованим EntityHandler, який обробляє AI, оновлення зіткнення та інші взаємодії сутності в одному класі? Або мені буде добре просто впроваджувати багато різних підсистем обробки подій, які передають повідомлення один одному на основі того, що це за подія? Чи варто написати EntityHandler, який просто відповідає за координацію всіх цих обробників додаткових подій?
Я розумію, що в деяких випадках, таких як мій InputHandler та SceneHandler, це дуже специфічні типи подій. Велика частина мого ігрового коду не піклується про введення, а велика частина не піклується про оновлення, які відбуваються виключно під час відображення сцени. Тому я вважаю, що моя ізоляція цих систем виправдана. Однак я задаю це питання, зокрема, підходячи до подій типу логічної гри.