2010-02-04 31 views
4

我试图停止一个提示,然后再播放一次。此代码是在更新()循环:C#XNA:停止并播放提示(声音)对象

Cue torpedoSound = soundBank.GetCue("torpedo"); 
torpedoSound.Stop(AudioStopOptions.AsAuthored); 
torpedoSound.Play(); // Invalid Operation Exception 

但是,我总是在上述地点得到InvalidOperationException。该文档说,如果在Cue上调用Play()isPlaying为真,则会发生这种情况。但是,如果我之前立即拨打Stop(),这怎么可能?

这工作得很好:

soundBank.PlayCue("torpedo"); 

发出呼叫Stop(),使声音后,立即反正玩,这让我惊讶:

soundBank.PlayCue("torpedo"); 
torpedoSound.Stop(AudioStopOptions.Immediate); 

不应该这样做它永远不会发出声响给用户?

此外,当声音已播放时,呼叫Stop()无法停止它。

我是C#/ XNA的新手。

+0

我不明白,你说你叫Stop的时候它已经停了,为什么?那么你说你打电话停止,因为它在播放,你想停止它?请你解释一下 – Amirshk 2010-02-04 03:49:50

+0

声音还没有播放,但我叫'Stop()'是安全的。但不知何故,它仍然给我一个例外,就好像它在玩。 – 2010-02-04 04:00:02

回答

2

一旦提示被停止,它就不能再使用了。您必须从音频引擎中获取新的Cue实例。

请参见本示例: http://msdn.microsoft.com/en-us/library/dd940205.aspx

关于停止时,提示不会立即停止,当你调用停止。如果定义了结束转换,它可能需要一两帧,甚至更多。