Tenho andado a pensar nos fundamentos de um mecanismo de jogo Java e cheguei ao ponto em que estou pronto para adicionar um sistema do Event Manager.
Eu sei, em teoria , o que um gerente de eventos deve fazer: permitir que objetos sejam "registrados" para determinados eventos e, sempre que o gerente de eventos for notificado de um evento, transmita o evento para os ouvintes "registrados". O que me surpreende é como começar a implementá-lo.
Não consegui encontrar nada, on-line, sobre a implementação de um sistema de eventos do zero, por isso estou procurando informações sobre quais são as melhores práticas neste caso - o que devo ou não fazer.
Por exemplo, é realmente necessário que cada um dos meus objetos de jogo tenha um EventManager
campo? Como todos os meus objetos de jogo são herdados de uma única classe-mãe abstrata, acho que devo usar uma referência estática para que haja apenas uma instância do Gerenciador de Eventos, compartilhada entre todos os objetos de jogo. Faço algo semelhante, com o Applet, que já uso para renderizar cada objeto.
Suponho que eu teria que manter uma coleção de algum tipo para cada possível evento inscrito - adicionando e removendo objetos de jogo da lista, conforme necessário. Eu acho que deveria ser possível criar uma fila de eventos que precisam ser transmitidos; nesse caso, eu poderia simplesmente adicionar "EventManager.Update ()" ao loop principal do jogo e fazer com que o Update()
método transmitisse os eventos que ocorreram no final de cada quadro. Por fim, cada objeto teria um HandleEvent(Event e)
método, ao qual eles poderiam analisar e responder adequadamente.
Isso soa como a direção apropriada para a implementação de um sistema desse tipo, ou estou fora do caminho e / ou estou perdendo algo bastante óbvio?