2010-02-04 56 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

關於停止時,提示不會立即停止,當你調用停止。如果定義了結束轉換,它可能需要一兩幀,甚至更多。