在我的应用中,我正在使用SoundEffect播放一些声音。我想知道是否有一种方法可以知道SoundEffect何时完成其运行,所以第二个将立即开始。
答案 0 :(得分:2)
据我所知,XNA不支持这种情况。
SoundEffect类公开了一个 Duration 属性,您可以使用该属性来实现您所追求的目标。
构建一些“SoundManager”类(基本上是一个简单的调度程序),它将完成声音播放的所有奇特协调。
此课程将取消SoundEffect播放,在持续时间过后完全安排下一个播放。
答案 1 :(得分:1)
旧的问题,但我今天必须做同样的事情,我尝试了基于持续时间的方法,但最终停止了自己的解决方案,这对我来说似乎是最简单的:
1)创建静态助手类让我们说'SoundsManager'就像麦角酸的答案一样。
2)创建一个SoundsEffectInstanses队列并播放其中的第一个(下面的代码中为“_sheduledSounds”)。
3)更新每个游戏循环的课程,并检查是否停止了声音实例:
public static void Update()
{
if (_sheduledSounds != null && _sheduledSounds.Count > 1)
{
if (_sheduledSounds.Peek().State == SoundState.Stopped)
{
_sheduledSounds.Dequeue();
_sheduledSounds.Peek().Play();
}
}
}
答案 2 :(得分:0)
设置此项 BufferDescription.GlobalFocus flag = True;
这将告诉SoundEffect完成其运行。