Если условие воспроизведения звука в 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();
                }
            }

1 ответ

Как упоминалось в комментариях к исходному сообщению, вы проверяете состояние LeftButton только при создании объекта. Что вам нужно сделать, это добавить метод Update, который выполняет проверку и воспроизводит звуковой эффект. Я также переместил бы загрузку soundEffect из этого цикла и сделал бы это, когда вы создаете или загружаете объект, чтобы у вас было что-то вроде этого:

    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) (где gun является экземпляром вашего класса оружия)

Другие вопросы по тегам