タグ付けされた質問 「object-pools」

1
オブジェクトを保持するためにPoolクラスが必要なのはいつですか?
私はopengl esを研究してきましたが、私が見た例は、「Pool」クラスを使用してタッチイベントとキーボードイベントを追跡することでした。 誰かがプールクラスが必要な方法と理由を説明してください。私が読んでいたことから、それはガベージコレクションと関係があり、作成される入力クラスの数を制限していました。 これはすべて抽象的であるように思えるので、もし誰かが何が起こっているのか説明してもらえたら、ありがたいです。ここにいくつかのコードを貼り付けます。 public Pool(PoolObjectFactory < T > factory, int maxSize) { this.factory = factory; this.maxSize = maxSize; this.freeObjects = new ArrayList < T > (maxSize); } public T newObject() { T object = null ; if (freeObjects.isEmpty()) object = factory.createObject(); else object = freeObjects.remove(freeObjects.size() - 1); return object; …

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サブクラスを作成するだけでよいので、メッセージには必要なだけの情報を含めることができます。 短所: メッセージのサブクラスごとに異なるプールがない限り、メッセージオブジェクトをオブジェクトプールにリサイクルする方法を理解できません。そのため、時間の経過とともに、オブジェクトの作成やメモリの割り当てが非常に多くなっています。 特定の受信者にメッセージを送信できませんが、ゲームではまだ必要ないので、あまり気にしません。 ここで何が欠けていますか?より良い実装または私が見逃しているいくつかのアイデアがあるはずです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.