4
ゲームメッセージングシステムの設計
私は簡単なゲームを作っており、メッセージングシステムの実装を試みることにしました。 システムは基本的に次のようになります。 エンティティはメッセージを生成します->メッセージはグローバルメッセージキューにポストされます-> messageManagerはonMessageReceived(Message msg)を介してすべてのオブジェクトに新しいメッセージを通知します->オブジェクトが必要な場合、メッセージに作用します。 メッセージオブジェクトを作成する方法は次のとおりです。 //base message class, never actually instantiated abstract class Message{ Entity sender; } PlayerDiedMessage extends Message{ int livesLeft; } これで、SoundManagerEntityは、onMessageReceived()メソッドでこのようなことを実行できます。 public void messageReceived(Message msg){ if(msg instanceof PlayerDiedMessage){ PlayerDiedMessage diedMessage = (PlayerDiedMessage) msg; if(diedMessage.livesLeft == 0) playSound(SOUND_DEATH); } } このアプローチの利点: 非常にシンプルで実装が簡単 必要な情報を持つ新しいMessageサブクラスを作成するだけでよいので、メッセージには必要なだけの情報を含めることができます。 短所: メッセージのサブクラスごとに異なるプールがない限り、メッセージオブジェクトをオブジェクトプールにリサイクルする方法を理解できません。そのため、時間の経過とともに、オブジェクトの作成やメモリの割り当てが非常に多くなっています。 特定の受信者にメッセージを送信できませんが、ゲームではまだ必要ないので、あまり気にしません。 ここで何が欠けていますか?より良い実装または私が見逃しているいくつかのアイデアがあるはずです。