2012-11-16 120 views
1

我在C#/ XNA中構建遊戲,它是一款頂級賽車遊戲,當我的汽車碰到牆壁時,我想播放音效。停止SoundEffect循環使用

問題是我的聲音一直在循環播放,所以當我撞到牆上時,歌曲會立即開始播放,但我希望它播放,播放完畢後可以再次播放。

這裏是一個需要碰撞的照顧代碼:

if (map[x][y] == 0) { car.speed = 0;

crash.Play(); } 

請問我,如果我'有關的東西並不清楚。

在此先感謝!

+1

'crash'是什麼類型 –

+0

Crash是SoundEffect – Max

回答

1

您可能需要查看SoundEffectInstance類。以下是關於如何正確使用它的example

您可以檢查音效狀態,以查看其是否正在播放

編輯:我添加了一個更完整的代碼,因爲我覺得它需要。這與我提供的鏈接大致相同。 (注:此代碼是未經測試)

//In your content load 
SoundEffect crash; 
crash = Content.Load<SoundEffect>("PathToYourSoundEffect"); 
SoundEffectInstance sei = crash.CreateInstance(); 

//In your update code 
if(sei.State == SoundState.Stopped || sei.State == SoundState.Paused) 
{ 
    sei.Play(); 
} 
+0

但是如果我輸入crash.State == SoundState.stopped,它說狀態不存在,我應該爲它創建一個實例嗎? – Max

+0

你必須創建一個'SoundEffectInstance'來包裝你的碰撞聲音。然後您將能夠檢查聲音的當前狀態。查看我提供的示例鏈接,它非常清晰和簡潔。 – Msonic

2

呼叫SoundEffect.CreateInstance()獲得SoundEffectInstance。然後IsLooped屬性設置爲false打電話之前Play

crashSoundEffectInstance.IsLooped = false; 
+0

我想嘗試一下,不使用soundeffectinstance類,我只想知道soundeffect何時結束播放,所以當它結束時,我可以再次開啓它。 – Max