0

私はトップハンドルが必要なゲームを構築しています。たくさんの効果音があります。エフェクトを再利用できるように、エフェクトのオブジェクトプールを作成しました。私の問題は、サウンドタイプごとにプールを作成せずに、優れたプールソリューションを作成する方法です。プールのチェックアウト機能は、リストの最初のサウンドを返します。

この少し汚い解決策は、プールから借りたアイテムが私が作成したいのと同じサウンドを持っているかどうかをチェックします。同じ音なら二度と音を出さない。そうでない場合は、プールに正しいサウンドのインスタンスがあることがわかっていても、作成します。

var item : ISoundItem = _soundPool.checkOut();

if(item.name != name)
    item.create(name, _soundFactory.create(name), config);

この汚い解決策により、インスタンスは数百から約7に減少しましたが、さらに最適化できると思います。

サウンド名をチェックアウト機能に渡すことを考えていましたが、毎回プールをループする価値は本当にありますか?

何か案は?

4

1 に答える 1

1

クイックルックアップを探していて、さまざまなサウンドがある場合は、VectorまたはArrayの代わりにDictionaryオブジェクトを使用してサウンド参照を保持することを検討してください。辞書はルックアップに反復を使用しません-それは常に1対1です。あなたはこのようなことをするでしょう:

var item : ISoundItem = _soundPool.checkOut(MySoundA);
var item : ISoundItem = _soundPool.checkOut(MySoundB);

この場合、名前で呼び出すことにはペナルティはありません。ただし、クラスでISoundItemを実装するオブジェクトのみをディクショナリに追加できるようにする必要があります。

この実装は、サウンドを使用する頻度によって異なります。頻繁に使用しない場合は、おそらく問題なく機能します。それらが長い音であるか、またはそれらを非常に急速に使用する場合は、配列の辞書またはその種の何かを行うことを検討するかもしれません。

于 2011-11-01T17:27:26.540 に答える