SoundEffectInstances
決定する重要なことは、一度にプレイする回数をどのように管理するかです。明らかな方法は、ゲームプレイコード(またはレベルなど)を変更して、再生するサウンドの数が増えすぎないようにすることです。
ただし、これが受け入れられない場合は、何らかの方法でハード制限を適用する必要があります。そして問題は、どうやってそれをするのかということです。各効果音には、その効果音のインスタンスの最大数がありますか?それとも、「サウンドクラス」(クラスの再生回数が最大になるクラス)はありますか?それとも、グローバルな最大サウンドカウントですか?追加のサウンドが再生されないようにすることで、上限が適用されますか?または、すでに再生されている音をカットすることによって?
私が提案するのはSoundEffect
、それとほぼ同じことを実装するラッパーオブジェクトを作成することですSoundEffect.Play
(sのプールを内部的に管理し、SoundEffectInstance
再生が終了したときにそれらを再利用します)。次に、その上に再生キャップ機能を追加します。
したがって、ラッパークラスは次のようになります。
class MySoundEffect
{
SoundEffect sound;
List<SoundEffectInstance> instances;
int maxInstances;
}
またはおそらくこのように:
class MySoundEffect
{
static int[] soundClassMaximums = { 2, 2, 5, 10 };
static int[] soundClassInstanceCount;
SoundEffect sound;
List<SoundEffectInstance> instances;
int class;
}
そして、MySoundEffect
通常使用しているすべての場所で使用しSoundEffect
ます。
ExEnを見てください。の内部を実装しているためSoundEffect
、実際のXNAと同様のプーリングコードを借用して、SoundEffect
機能を追加した独自のインスタンスプールの開始点として使用できます。
それを行うには他の方法があり、それはあなたのアーキテクチャに依存します。しかし、基本的には、効果音とインスタンスの間の関連付けを追跡するのはあなた次第です。XNA APIでそれを行う方法はありません(厄介なリフレクションを行う以外に)。