1

ねえ、

Monogame でゲームを作成しましたが、次の問題が発生しました。

ゲームをロードしたときに再生されるテーマソングを取得しました。これは、テーマソングが再生される場合と再生されない場合があるという問題です。XNA パイプラインで wma に変換し、.xnb と一緒にゲームにロードしますが、音楽が始まらない場合があります。

曲を開始するための標準コードを使用するだけで、このコードはすべて実行されます。

internal void PlayBackgroundMusic()
{
    if (MediaPlayer.GameHasControl)
    {
        MediaPlayer.Volume = mainVolume;
        MediaPlayer.Play(backgroundMusic);
        MediaPlayer.IsRepeating = true;
    }
}

SoundEffects も使用しますが、これらは常に 100% 機能します。起動するたびに再生されるわけではない曲だけです。ちなみに、Windows RT は問題なく動作します。

4

2 に答える 2

3

デバッガーがデバッグを通じて if ステートメントに入ることを確認します (またはステートメントを一時的に削除します)。別の可能性として、ゲームが完全に初期化される前に関数が実行されている可能性があります。ゲームが完全に読み込まれるまで、関数を遅らせてみてください。

PS: 質問にはまだコメントできないので、ここに回答を示します。

編集

さて、Song クラスをいじり、MonoGame の実装を調べた結果、SoundEffect クラスの方が使いやすく、より適切に実装されているという結論に達しました。

backgroundSound = Content.Load<SoundEffect>("alarm");

protected override void BeginRun()
{
    // I created an instance here but you should keep track of this variable
    // in order to stop it when you want.
    var backSong = backgroundSound.CreateInstance();
    backSong.IsLooped = true;
    backSong.Play();

    base.BeginRun();
}

この投稿を使用しました: BeginRun オーバーライドを使用して、起動時に SoundEffect を再生します。

于 2013-10-16T19:33:39.990 に答える
0

曲を演奏したい場合は、Songクラスを使用してください。ただし、「.xnb」に変換する前に、「.wma」ではなく「.mp3」を使用していることを確認してください。

backgroundMusic = Content.Load<Song>("MainTheme");
MediaPlayer.Play(backgroundMusic);
MediaPlayer.IsRepeating = true;

MSDNを参照してください。

于 2013-10-16T22:14:45.357 に答える