Проблема XNA MediaPlayer

У меня есть следующий код в Draw() в Game1. Однако музыка воспроизводится только тогда, когда я нажимаю кнопку закрытия программы. Где я должен помещать MediaPlayer.Play (), если нет? normS, fastS, slowS и воспроизведение - это все типы песен. Если вам нужно, чтобы я что-то прояснил, просто спросите.

        if (stateS == "normal")
        {
            if (!MediaPlayer.Equals(playing, normS))
            {
                playing = normS;
            }

            spriteBatch.Draw(norm, pos, Color.White);
        }
        else if (stateS == "fast")
        {
            if (!MediaPlayer.Equals(playing, fastS))
            {
                playing = fastS;
            }
            spriteBatch.Draw(fast, pos, Color.White);
        }
        else if (stateS == "slow")
        {
            if (!MediaPlayer.Equals(playing, slowS))
            {
                playing = slowS;
            }
            spriteBatch.Draw(slow, pos, Color.White);
        }
        MediaPlayer.Play(playing);
0
nl ja de
Как вы ожидаете, что ваши звуки будут играть, и как они на самом деле играют?
добавлено автор user1306322, источник
Трудно сказать без кода окружения, но кажется, что ваш метод Play() запускается только при нажатии определенной кнопки. Вы должны перенести его в метод Update() и работать только тогда, когда звук не воспроизводится.
добавлено автор user1306322, источник
Песни должны воспроизводиться с момента запуска игры до выхода, и они воспроизводятся с помощью MediaPlayer.Play (). Однако песня воспроизводится только тогда, когда я нажимаю кнопку закрытия, но правильная песня воспроизводит
добавлено автор Felpalidan, источник

1 ответы

Есть ли какая-то особая причина, по которой вам нужно, чтобы песни воспроизводились из метода Draw? Ничья должна быть зарезервирована для рисования вещей.

Как и user1306322, в приведенном выше комментарии я бы рекомендовал переместить

MediaPlayer.Play(playing); 

в метод Update и оберните его в условное (чтобы вы не просто продолжали воспроизводить новую песню, каждое обновление, которое I think - это то, что происходит для вас сейчас, после нажатия и удерживания Close Window x останавливается обновления. Вы можете попробовать это, перетащив окно также):

if (!MediaPlayer.IsPlaying)
{
    MediaPlayer.Play(playing);
}

Если необходимо, вы можете оставить остальную часть кода в Draw, но, скорее всего, все это должно пойти в «Обновление».

edit I just realised you may not have a conditional on this because you want to be able to change the song at any time. In that case, you should set a variable to hold your "Last Song", so you can compare it in your conditional like this:

if (MediaPlayer.IsPlaying == false || playing != lastPlaying)
{
    MediaPlayer.Play(playing);
}
0
добавлено
Если вы перетащите окно вокруг строки заголовка, начнется ли музыка? Или только когда вы закрываете программу?
добавлено автор Unicorno Marley, источник
Где вы устанавливаете lastPlaying в своем цикле обновления? Это последнее, или вы, возможно, имеете это выше условного утверждения? lastPlaying должен изначально вызываться в вашем методе LoadContent, а затем вы должны установить его значение MediaPlayer.IsPlaying как последнее, что произошло в вашем обновлении (или, по крайней мере, после вашего вызова в MediaPlayer.Play)
добавлено автор Unicorno Marley, источник
Большое вам спасибо за этот ответ. К сожалению, он все еще имеет ту же проблему. Я изменил код так, чтобы он запускал только код, который я опубликовал ранее, когда вы меняете состояния, и я также пробовал lastPlaying с условием в update (), однако все те же проблемы все еще возникают.
добавлено автор Felpalidan, источник
Всякий раз, когда я перетаскиваю его, так что update() все равно запускает его каждый раз, я думаю.
добавлено автор Felpalidan, источник
Извините за поздний ответ, но он сработал после того, как я перешел lastPlaying. У меня также был дополнительный MediaPlayer.Play (), который испортил его. Благодаря тонну!
добавлено автор Felpalidan, источник