-2

XNAで特定の曲が再生されているかどうかを確認できるかどうかを知りたいのですが、やりたいことは次のようなものです

if(stateS == "normal")
        {
            if(MediaPlayer.IsPlaying(song1)
            {
               //do nothing  
            }
            if(!MediaPlayer.IsPlaying(song1)
            {
               //play song 1 
            }
            spriteBatch.Draw(norm, pos, Color.White);
        }
        if(stateS == "fast")
        {
            if(MediaPlayer.IsPlaying(song2)
            {
               //do nothing  
            }
            if(!MediaPlayer.IsPlaying(song2)
            {
               //play song 2
            }
            spriteBatch.Draw(fast, pos, Color.White);
        }
        if(stateS == "slow")
        {
            if(MediaPlayer.IsPlaying(song3)
            {
               //do nothing  
            }
            if(!MediaPlayer.IsPlaying(song31)
            {
               //play song 3
            }
            spriteBatch.Draw(slow, pos, Color.White);
        }

悲しいことに、特定の曲が再生されているかどうかを確認する方法が見つからなかったため、これを行う方法が見つかりませんでした. どんな提案や助けも大歓迎です!

4

2 に答える 2

1

タイムスパンの辞書を使用して各サウンドの再生が開始される時刻をマークすることにより、すべてのサウンドを追跡できます。

Dictionary<string, TimeSpan> SoundStartTimeDic;

次のように、名前をキーとして、現在のゲーム時間を値としてサウンドの再生を開始するたびに、辞書のキーと値のペアを入力します。

SoundStartTimeDic[mySound.Name()] = gameTime;

次に、現在の時刻からサウンドの開始時刻を引いた差が、サウンドの持続時間よりも大きいかどうかを確認できます。

if (gameTime.TotalMilliseconds -
     SoundStartTimeDic[mySound.Name()].TotalMilliseconds >
     mySound.Duration.TotalMilliseconds)
{ /* yes, the sound has played already */ }

だから私はあなたがそれが終わった後にあなたの音をもう一度演奏したいと思った。そして、あなたはMediaPlayer何らかの理由で使用しています。

次のいずれかを使用できますSystem.Media.SoundPlayer

SoundPlayer sound = new SoundPlayer("path");
sound.PlayLooping();

またはそれをXNAの方法で行います:

SoundEffect bgmusic;
bgmusic = Content.Load<SoundEffect>("path");
SoundEffectInstance instance = bgEffect.CreateInstance();
instance.IsLooped = true;
bgEffect.Play();
于 2013-01-28T03:13:57.247 に答える
0

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;
            }
        }
于 2013-01-29T00:25:46.997 に答える