-1

最近、WPF ゲームを作成しました。最後に追加したのは音楽で、ループ付きの mp3 だけでした。

これは私がそれを達成するためにしたことです。

Music = new MediaPlayer();
Music.Open(new Uri("Sounds/MyMusic.mp3", UriKind.Relative));
Music.MediaEnded += MusicEnded;
Music.Play();



private void MusicEnded(object sender, EventArgs e)
{
Music.Stop();
Music.Play();
}

ゲームは正常に動作しており、問題なく 3 日間 2 時間以上使用しましたが、そのうちの 1 日で音楽が停止し、他のサウンドが再生され続けました。

これはどうして起こったのでしょうか?イベント ハンドラーは 1 つのイベントを見逃すことができますか? その場合、誰も EventHandler や音楽を監視していないため、私のコードは機能しなくなります。

このコードを改善するにはどうすればよいですか? またはこれが起こらないようにしますか?

4

2 に答える 2

2

GUI スレッドから音楽を開始しますか?

GUI スレッドが他の処理でビジーで、イベントを見逃した場合は、その理由を確認してください。余分なループを取り、問題を繰り返そうとする時間を追加するかもしれません。

繰り返す別の方法:

private void MusicEnded(object sender, EventArgs e)
{
    Music.Position = TimeSpan.FromSeconds(0);
    Music.Play();
}
于 2013-01-11T14:51:26.753 に答える
2

音楽が停止および開始せずに終了したときに、Position プロパティを設定してみてください

XNA mediaplayer の場合、IsRepeating プロパティを使用できます http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.media.mediaplayer.isrepeating.aspx

于 2013-01-11T14:10:04.587 に答える