Наверное, я решил, что мне действительно нравятся обработчики событий. Возможно, я немного страдаю от паралича анализа, но я обеспокоен тем, чтобы сделать мой дизайн громоздким или столкнуться с какими-то непредвиденными последствиями для моих дизайнерских решений.
Мой игровой движок в настоящее время выполняет базовый спрайт-рендеринг с панорамирующей камерой. Мой дизайн выглядит примерно так:
SceneHandler
Содержит список классов, которые реализуют интерфейс SceneListener (в настоящее время только Sprites). Вызывает render () один раз за такт и отправляет onCameraUpdate (); сообщения для SceneListeners.
InputHandler
Опрашивает ввод один раз за тик и отправляет простое сообщение «onKeyPressed» в InputListeners. У меня есть Camera InputListener, который содержит экземпляр SceneHandler и запускает updateCamera (); события, основанные на том, что вход.
AgentHandler
Вызывает действия по умолчанию для любых Агентов (AI) один раз за такт и проверяет стек на наличие новых зарегистрированных событий, отправляя их определенным агентам по мере необходимости.
Итак, у меня есть базовые спрайтовые объекты, которые могут перемещаться по сцене и использовать элементарные способы управления рулем для путешествий. Я попал на обнаружение столкновений, и именно здесь я не уверен, что направление, в котором движется мой дизайн, хорошее. Это хорошая практика иметь много маленьких обработчиков событий? Я представляю себе, что я должен реализовать что-то вроде CollisionHandler.
Будет ли мне лучше с более консолидированным EntityHandler, который обрабатывает AI, обновления столкновений и другие взаимодействия сущностей в одном классе? Или я буду в порядке, просто внедрив множество различных подсистем обработки событий, которые передают сообщения друг другу в зависимости от того, что это за событие? Должен ли я написать EntityHandler, который просто отвечает за координацию всех этих обработчиков событий?
Я понимаю, что в некоторых случаях, таких как мой InputHandler и SceneHandler, это очень специфические типы событий. Большая часть моего игрового кода не будет заботиться о вводе, а большая часть не будет заботиться об обновлениях, которые происходят исключительно при рендеринге сцены. Таким образом, я чувствую, что моя изоляция этих систем оправдана. Тем не менее, я задаю этот вопрос специально для событий типа игровой логики.