2014-10-24 2 views
0

마우스 왼쪽 버튼을 클릭하면 총소리가 들리고 싶지만 코드가 작동하지 않습니다. (오류없이 실행 중이지만 소리가 들리지 않습니다.)XNA에서 조건 재생 사운드가 소리를 재생하지 않습니까?

"조건"을 제거하고 실행하면 일단 게임이 실행되면 게임은 총소리가 될 것입니다.

하지만 "if 조건"을 사용하면 마우스 왼쪽 버튼을 클릭해도 더 이상 작동하지 않습니다. 이 문제를 해결하려면 도움이 필요합니다.

class Gun 
     { 
      Texture2D gun; 
      Vector2 position; 
      SoundEffect soundEffect; 

      public Gun(ContentManager Content) 
      { 
       gun = Content.Load<Texture2D>("Gun"); 
       position = new Vector2(10, 10); 
       MouseState mouse = Mouse.GetState(); 

       if (mouse.LeftButton == ButtonState.Pressed) 
       { 
        soundEffect = Content.Load<SoundEffect>("gunshot"); 
        soundEffect.Play(); 
       } 
      } 
+0

생성자에서 이것을 수행하는 것이 합리적입니까? 이것이 업데이트하는 동안 당신이하는 일이 아니겠습니까? –

+0

글쎄, 당신은 * 생성자에서 사운드 효과를 확인하고 있습니다 * 업데이트 루프에서 마우스 상태를 확인해야하므로 if 문이 두 번 이상 실행됩니다. – BradleyDotNET

+0

고맙습니다. 그렇습니다. 나는 주 클래스의 업데이트 루프에 if 문을 두었습니다. 이제 예상대로 작동합니다. –

답변

3

원래 게시물에 대한 의견에서 언급했듯이 개체를 만들 때만 LeftButton 상태를 확인합니다. 당신이해야 할 일은 검사를 수행하고 사운드 효과를 재생하는 Update 메소드를 추가하는 것입니다.

public class Gun 
    { 
     Texture2D gun; 
     Vector2 position; 
     SoundEffect soundEffect; 
     MouseState _previousMouseState, currentMouseState; 

     public Gun(ContentManager Content) 
     { 
      gun = Content.Load<Texture2D>("Gun"); 
      soundEffect = Content.Load<SoundEffect>("gunshot"); 
      position = new Vector2(10, 10); 
     } 


     public void Update(GameTime gameTime) 
     { 
      // Keep track of the previous state to only play the effect on new clicks and not when the button is held down 
      _previousMouseState = _currentMouseState; 
      _currentMouseState = Mouse.GetState(); 
      if(_currentMouseState.LeftButton == ButtonState.Pressed && _previousMouseState.LeftButton != ButtonState.Pressed) 
       soundEffect.Play(); 
     } 
    } 

그런 다음 게임의 업데이트 루프에서, 단지 gun.Update (gameTime)로 전화 : 당신이 만들거나 이런 식으로 뭔가를 그래서 객체를로드 할 때 나는 또한 그 루프 밖으로 soundEffect로드를 이동하고 그것을 할 것 (gun은 총 클래스의 인스턴스입니다.)

+0

감사합니다. 아주 좋은 해결책입니다! –

관련 문제