Mi sono dilettato con i fondamenti di un motore di gioco Java e ho raggiunto il punto in cui sono pronto per aggiungere un sistema Event Manager.
So, in teoria , cosa dovrebbe fare un Event Manager: consentire agli oggetti di "registrarsi" per determinati eventi e ogni volta che il Manager degli eventi viene avvisato di un evento, trasmetterlo agli ascoltatori "registrati". Ciò su cui sono sconcertato è come iniziare a implementarlo.
Non sono stato in grado di trovare nulla, online, sull'implementazione di un sistema di eventi da zero, quindi sto cercando input su quali sono le migliori pratiche in questo caso - cosa dovrei e non dovrei fare.
Ad esempio, è davvero necessario che ciascuno dei miei oggetti di gioco abbia un EventManager
campo? Poiché tutti i miei oggetti di gioco ereditano da una singola classe genitore astratta, penso che dovrei essere in grado di utilizzare un riferimento statico in modo che ci sia solo un'istanza di Event Manager, condivisa tra tutti gli oggetti di gioco. Faccio qualcosa di simile, con l'applet, che uso già per il rendering di ogni oggetto.
Suppongo che dovrei mantenere una raccolta di qualche tipo per ogni possibile evento sottoscritto - aggiungere e rimuovere oggetti di gioco dall'elenco, se necessario. Penso che dovrebbe essere possibile creare una coda di eventi che devono essere trasmessi, nel qual caso potrei semplicemente aggiungere "EventManager.Update ()" al loop di gioco principale e fare in modo che il Update()
metodo trasmetta gli eventi che si sono verificati alla fine di ogni fotogramma. Infine, ogni oggetto avrebbe un HandleEvent(Event e)
metodo, che potrebbe quindi analizzare e rispondere in modo appropriato.
Questo suona come la direzione appropriata verso l'implementazione di un tale sistema, o sto andando fuori strada e / o mancando qualcosa di abbastanza ovvio?