私はJavaゲームエンジンの基本をいじくり回しており、イベントマネージャーシステムに追加する準備ができたところに到達しました。
理論的には、イベントマネージャーがすべきことはわかっています。特定のイベントにオブジェクトを「登録」できるようにし、イベントマネージャーがイベントの通知を受けるたびに、イベントを「登録済み」リスナーにブロードキャストします。私が困惑しているのは、それを実装し始める方法です。
イベントシステムを最初から実装することについて、オンラインで何も見つけることができなかったので、この場合のベストプラクティスとは何か、私がすべきこととすべきでないことについてのインプットを探しています。
たとえば、ゲームオブジェクトごとにEventManager
フィールドが本当に必要なのでしょうか。すべてのゲームオブジェクトは単一の抽象親クラスを継承しているため、静的参照を使用して、すべてのゲームオブジェクト間で共有されるイベントマネージャーのインスタンスが1つだけになるようにする必要があります。アプレットを使って、各オブジェクトのレンダリングにすでに使用しているのと同じようなことをしています。
可能なサブスクライブイベントごとに、ある種のコレクションを維持する必要があると思います。必要に応じて、リストにゲームオブジェクトを追加したり削除したりします。ブロードキャストする必要があるイベントのキューを作成することは可能だと思います。その場合は、メインのゲームループに「EventManager.Update()」を追加し、Update()
メソッドが最後に発生したイベントをブロードキャストするようにすることができます各フレームの。最後に、各オブジェクトにはHandleEvent(Event e)
メソッドがあり、それらを適切に解析して応答することができます。
これは、そのようなシステムの実装に向けた適切な方向性のように聞こえますか、それとも、軌道から外れているのか、および/または非常に明白なものがないのですか?