2012-07-10 67 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