0

Game1のDraw()に次のコードがあります。ただし、音楽は、プログラムの閉じるボタンを押しているときにのみ再生されます。MediaPlayer.Play()がない場合は、どこに配置する必要がありますか?normS、fastS、slowS、およびplayingはすべてソングタイプです。あなたが私に何かを片付ける必要があるなら、ただ尋ねてください。

        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メソッドに追加し、条件付きでラップします(つまり、更新のたびに新しい曲を再生し続けるのではなく、ウィンドウを閉じるxをクリックして押し続けると更新が停止するため、これが今起こっていることだと思います。これを試すことができます。ウィンドウをドラッグすることによっても):

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

必要に応じて、残りのコードをDrawのままにしておくことができますが、ほとんどの場合、このすべてをUpdateに入れる必要があります。

編集いつでも曲を変更できるようにしたいので、これを条件としないかもしれないことに気づきました。その場合、「最後の曲」を保持する変数を設定して、次のように条件付きで比較できるようにする必要があります。

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