List<SoundEffectInstance> explosionSoundInstanceList;
explosionSound = Content.Load<SoundEffect>("sound/explosion");
explosionSoundInstanceList = new List<SoundEffectInstance>(MAX_EXPLOSIONS);
for (int i = 0; i < MAX_EXPLOSIONS; i++)
{
explosionSoundInstanceList.Add(explosionSound.CreateInstance());
}
private void PlayExplosionSound(float volume, float pitch, float pan)
{
ClampSoundValues(ref volume, ref pitch, ref pan);
for (int i = 0; i < explosionSoundInstanceList.Count; i++)
{
if (explosionSoundInstanceList[i].State == SoundState.Stopped)
{
explosionSoundInstanceList[i].Volume = volume/(i+1);
explosionSoundInstanceList[i].Pitch = pitch;
explosionSoundInstanceList[i].Pan = pan;
explosionSoundInstanceList[i].Play();
return;
}
}
return;
}
제대로 작동합니다. 인스턴스화 후 360의 쓰레기는 0입니다. 한도를 맞추면 우아하게 실패합니다.
내가 사용하는 것입니다.
는 I 예외가 떨어질 바보 같은 값으로 설정 한 thusly 히
private static void ClampSoundValues(ref float volume, ref float pitch, ref float pan)
{
volume = MathHelper.Clamp(volume, -1f, 1f);
pitch = MathHelper.Clamp(pitch, -1f, 1f);
pan = MathHelper.Clamp(pan, -1f, 1f);
}
값을 클램프.
가능한 중복 [하나의 인스턴스에서 소리 반복] (http://stackoverflow.com/questions/8994292/repeating-sound-from-one-instance) –