0

我在 Game1 的 Draw() 中有以下代码。但是,只有在我按下程序的关闭按钮时才会播放音乐。如果没有,我应该把 MediaPlayer.Play() 放在哪里?normS、fastS、slowS、playing 都是 Song 类型。如果你需要我澄清什么,尽管问。

        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);
4

1 回答 1

0

是否有特殊原因需要使用 Draw 方法播放歌曲?绘图应该保留用于绘制事物。

就像上面评论中所说的 user1306322 一样,我建议将

MediaPlayer.Play(playing); 

进入 Update 方法,并将其包装在条件中(这样您就不会在每次更新时都继续播放一首新歌,我认为这是您现在正在发生的事情,因为单击并按住 Close Window x 会停止更新。您可以试试这个也可以拖动窗口):

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

如有必要,您可以将其余代码留在 Draw 中,但很可能整个事情都应该放在 Update 中。

编辑我刚刚意识到您可能对此没有条件,因为您希望能够随时更改歌曲。在这种情况下,你应该设置一个变量来保存你的“最后一首歌”,这样你就可以在你的条件中比较它,如下所示:

if (MediaPlayer.IsPlaying == false || playing != lastPlaying)
{
    MediaPlayer.Play(playing);
}
于 2013-01-29T16:01:11.093 回答