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