C# 宋不';Don’我不会一直玩单人游戏

C# 宋不';Don’我不会一直玩单人游戏,c#,xna,windows-store-apps,monogame,C#,Xna,Windows Store Apps,Monogame,嘿 我们用Monogame创建了一个游戏,但是我们遇到了以下问题 我们有一个主题,当你现在加载游戏时,它会播放,问题是主题有时会播放,但有时就是不播放。我们通过XNA管道将其转换为wma,并将其与.xnb一起加载到我们的游戏中,但有时音乐不想开始 我们只是使用标准代码开始一首歌,所有这些代码都会触发 internal void PlayBackgroundMusic() { if (MediaPlayer.GameHasControl) { MediaPlayer

我们用Monogame创建了一个游戏,但是我们遇到了以下问题

我们有一个主题,当你现在加载游戏时,它会播放,问题是主题有时会播放,但有时就是不播放。我们通过XNA管道将其转换为wma,并将其与.xnb一起加载到我们的游戏中,但有时音乐不想开始

我们只是使用标准代码开始一首歌,所有这些代码都会触发

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

我们也使用音效,但这些音效在100%的情况下都有效,只有歌曲不会在每次开始时播放。顺便说一下,Windows RT运行得很好。

确保调试程序通过调试进入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();
}
backgroundSound=Content.Load(“报警”);
受保护的覆盖void BeginRun()
{
//我在这里创建了一个实例,但是您应该跟踪这个变量
//为了在你想要的时候阻止它。
var backSong=backgroundSound.CreateInstance();
backSong.islopped=true;
背唱;演奏();
base.BeginRun();
}

我用了这篇文章:在启动时播放SoundEffect。

如果你想播放一首歌,请使用
song
类。但在将其转换为“.xnb”之前,请确保使用的是“.mp3”而不是“.wma”

backgroundMusic=Content.Load(“主主题”);
MediaPlayer.Play(背景音乐);
MediaPlayer.IsRepeating=true;

请参阅。

就像我提到的那样,我的代码在已加载背景音乐的情况下被触发。我甚至试着用2秒的延迟来播放这个主题,但这也没用。我从其他人那里发现了一些关于没有播放歌曲的模糊问题,但他们使用了旧版本的monogame en,他们说它在3.0中得到了修复,我甚至运行了3.2,我获得了相同的信息。这首歌似乎管用,但循环一首歌却行不通。我建议使用SoundEffect,因为它的实现更好,并且支持开箱即用。我不喜欢使用SoundEffect,因为虽然我的应用程序已经发布,而且我联系的每个没有自行开发的人在声音播放方面都没有任何问题,但它对大文件的处理效率很低。这真的很奇怪,我不知道我是否能相信它,但现在就可以了。我肯定会研究您的解决方案,并根据内存和cpu使用情况进行检查,如果有明显差异的话。感谢您迄今为止的帮助。3年过去了,MediaPlayer仍然没有播放这首歌(以我的经验,在iOS中,在WinRT中),您解决了这个问题吗?
backgroundMusic = Content.Load<Song>("MainTheme");
MediaPlayer.Play(backgroundMusic);
MediaPlayer.IsRepeating = true;