XNA MediaPlayer问题

时间:2013-01-29 00:35:40

标签: xna

我在Game1的Draw()中有以下代码。但是,当我按下该程序的关闭按钮时,音乐才会播放。如果没有,我应该把MediaPlayer.Play()放在哪里? normS,fastS,slowS和play都是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);

1 个答案:

答案 0 :(得分:0)

是否有一个特殊原因需要让歌曲播放出Draw方法?画画应留作画画。

与上述评论中的user1306322一样,我建议移动

MediaPlayer.Play(playing); 

进入Update方法,并将其包装在条件中(所以你不要只是每次更新都要播放一首新歌,我认为就是你现在正在发生的事情,因为你点击并按住了关闭窗口x会停止更新。您可以通过拖动窗口来尝试此操作):

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

如果有必要,你可以将剩下的代码保留在Draw中,但很可能这一切都应该放在Update中。

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

if (MediaPlayer.IsPlaying == false || playing != lastPlaying)
{
    MediaPlayer.Play(playing);
}