Я підходив до основ ігрового двигуна Java, і дойшов до того, коли я готовий додати в систему Event Manager.
Я теоретично знаю, що повинен робити Менеджер подій: дозволяти об’єктам "реєструватися" для певних подій, і щоразу, коли Менеджер подій отримує повідомлення про подію, транслює подію "зареєстрованим" слухачам. Те, про що я натрапив - це як почати його реалізовувати.
Мені в Інтернеті нічого не вдалося знайти про те, як запровадити систему подій з нуля, тому я шукаю інформацію про те, які найкращі практики в цьому випадку - що я повинен, а що не повинен робити.
Наприклад, чи дійсно потрібно, щоб кожен з моїх ігрових об’єктів мав EventManager
поле? Оскільки всі мої ігрові об'єкти успадковуються від одного, абстрактного батьківського класу, я думаю, я повинен мати можливість використовувати статичну довідку, щоб було лише один екземпляр диспетчера подій, розділений між усіма ігровими об'єктами. Я роблю щось подібне, з Applet, що я використовую для візуалізації кожного об'єкта.
Я думаю, мені доведеться підтримувати якусь колекцію для кожної можливої передплаченої події - додавання та видалення ігрових об’єктів зі списку, якщо потрібно. Я думаю , що це повинно бути можливо зробити чергу подій , які повинні бути мовлення, в цьому випадку я міг би просто додати «EventManager.Update ()» в основний цикл гри, і є Update()
спосіб транслювати події , які відбулися в кінці кожного кадру. Нарешті, кожен об'єкт мав би HandleEvent(Event e)
метод, який потім міг би аналізувати та відповідати відповідним чином.
Чи звучить це як відповідний напрямок до впровадження такої системи, чи я відхиляюсь від шляху та / або пропускаю щось цілком очевидне?