2012-07-10 68 views
0

每次按下一個鍵發射導彈時,我都會使用聲音。但這聽起來不錯。我想這是因爲在按下鍵時聲音重複了很多次,並且代碼在Update方法中。我正在尋找一個簡單的解決方案,只需按下按鍵即可播放一次聲音? (我已經測試過使用一個布爾變量在第一次變爲true,然後在聲音已經播放之後變爲false,但是這樣做效果不佳,因爲何時何地我應該再次將其設置爲true)幫助會被預先消除!控制聲音只能在XNA播放一次

// Fire 
if (keyboardState.IsKeyDown(Keys.Space)) 
{ 
missile.launchMissile(spaceship.spaceshipPosition, spaceship.spaceshipDirection); 

soundExplosion.Play(); 
} 

編輯新的代碼不工作!?

  KeyboardState keyboardState = Keyboard.GetState(); 

     KeyboardState prevKeyboardState; 

     prevKeyboardState = keyboardState; 

     keyboardState = Keyboard.GetState(); 


     if (keyboardState.IsKeyDown(Keys.Space) && prevKeyboardState.IsKeyUp(Keys.Space)) 
     { 
      missile.launchMissile(spaceship.spaceshipPosition, spaceship.spaceshipDirection); 
      soundExplosion.Play(); 
     } 

回答

0

商店以前的鍵盤狀態以及

KeyBoardState prevKeyboardState; 

然後在更新

prevKeyboardState = keyboardState; 
keyboardState = Keyboard.GetState(); 

if (keyboardState.IsKeyDown(Keys.Space) && prevKeyboardState.IsKeyUp(Keys.Space)) 
{ 
    //your code 
} 

你基本上只是觸發的聲音噸次每秒使得它聽起來很可怕。

+0

嗨!感謝您的幫助,但代碼無法正常工作!我已經用你的代碼嘗試過所有類型的組合!什麼可能是錯的?我猜KeyboardState的第一行有一個大的'B',它應該是一個小'b'!?更多的幫助是preciated! – 2012-07-11 15:52:46

+0

很難說出你在哪裏創造這些東西。如果你把KeyBoardState prevKeyboardState;在你的更新電話中,這是你的問題,但我不能告訴你的帖子。 – Beanish 2012-07-13 14:27:46