Я разбираюсь с основами игрового движка Java и достиг той точки, когда я готов добавить систему Event Manager.
Теоретически я знаю, что должен делать Менеджер событий: разрешать объектам «регистрироваться» для определенных событий, и всякий раз, когда Менеджер событий получает уведомление о событии, передает событие «зарегистрированным» слушателям. То, что я поставил в тупик, это как начать это реализовывать.
Я не смог ничего найти в Интернете о внедрении системы событий с нуля, поэтому я ищу информацию о том, каковы лучшие практики в этом случае - что я должен и не должен делать.
Например, действительно ли необходимо, чтобы у каждого из моих игровых объектов было EventManager
поле? Поскольку все мои игровые объекты наследуются от одного абстрактного родительского класса, я думаю, что я должен иметь возможность использовать статическую ссылку, чтобы был только один экземпляр диспетчера событий, общий для всех игровых объектов. Я делаю нечто похожее с апплетом, который уже использую для рендеринга каждого объекта.
Полагаю, мне нужно было бы поддерживать какую-то коллекцию для каждого возможного подписанного события - добавлять и удалять игровые объекты из списка по мере необходимости. Я думаю, что должна быть возможность создать очередь событий, которые должны быть переданы, и в этом случае я мог бы просто добавить EventManager.Update () в основной цикл игры, и чтобы Update()
метод транслировал события, которые произошли в конце каждого кадра. Наконец, у каждого объекта должен быть HandleEvent(Event e)
метод, который они могли бы затем проанализировать и ответить соответствующим образом.
Похоже ли это на правильное направление реализации такой системы, или я не в курсе и / или упускаю что-то совершенно очевидное?