2014-01-09 42 views
1

我試圖在遊戲狀態發生變化時播放聲音XNA - 聲音更新方法

例如我在主菜單中,點擊說明並播放聲音。我點擊返回按鈕它再次播放相同的聲音。

我有很多麻煩實施這個!

case GameState.MainMenu: 
       if (PlayButton.isClicked == true) CurrentGameState = GameState.Levels; 
       menuSoundPlayOnce = true; 
       PlayButton.Update(mouse); 
       if (instructionsButton.isClicked == true) CurrentGameState = GameState.Instructions; 
       instructionsButton.Update(mouse); 
       if (quitButton.isClicked == true) 
       Exit(); 
       quitButton.Update(mouse); 
       break; 


case GameState.Instructions: 
       if (backButton.isClicked == true) CurrentGameState = GameState.MainMenu; 
       backButton.Update(mouse); 
       if (!menuToMenuSoundPlayOnce) 
       { 
        menuToMenuSound.Play(); 
       } 
       menuToMenuSoundPlayOnce = true; 
       break; 

我的聲音只能播放一次使用的代碼

if (!menuToMenuSoundPlayOnce) 
       { 
        menuToMenuSound.Play(); 
       } 
       menuToMenuSoundPlayOnce = true; 

但它播放一次,當然menuToMenuSoundPlaceOnce被設置爲false。 如果我改變它以保持爲假,它會一遍又一遍地播放聲音。

我似乎無法在網上找到任何關於此的信息。

感謝所有幫助

回答

0

嘗試這樣:

//Get a instance of the sound effect -- do this once only 
SoundEffectInstance menuSoundInstance = menuToMenuSound.CreateInstance(); 


//Play the sound during update, if the sound is not already playing 
if (menuSoundInstance.State == SoundState.Stopped) 
{ 
    menuToMenuSound.Play(); 
} 
+0

非常感謝您的答覆, 我已經嘗試添加這一點,但還是聲音持續不斷髮揮。 我只想要它每場比賽的狀態,但似乎無法得到它 – Dereck

+0

請確保您只在Update()方法之外實例化SoundEffectInstance一次。您通常會在類級創建此對象,並在LoadContent()期間加載它 – jgallant