wp7游戏处理背景音乐与系统音乐冲突问题
进入游戏时,如果正在用手机的音乐播放器播放音乐,此时要让手机继续播放音乐呢还是播放游戏背景音乐呢?你可能会说,无所谓,一起听也行,但是。。。。但是。。。微软的审核人员不这么认为,如果没有处理好背景音乐与系统音乐的冲突,游戏会在审核时被拒的
那么,要怎么处理呢?
注:说明一下,我的项目是Silverlight和XNA混合建立的,所以有些地方和单纯的Silverlight或XNA项目略有不同,但是原理相通,在适当的地方修改就好。
首先,要判断进入游戏时是否正在播放背景音乐,注意,这里不要用 if (Microsoft.Xna.Framework.Media.MediaPlayer.Queue.Count > 0) 来判断,貌似判断不好,更简单也更方便代码量更少的方法是用if (BGMbool == true && !MediaPlayer.GameHasControl ) ,MediaPlayer.GameHasControl 就是用来判断游戏是否有对背景音乐的掌控权,如果没有,就表示音乐播放器正在播放音乐,而BGMbool 是我另设的一个bool变量,用来判断用户设置了是否播放游戏背景音乐,如果用户在设置里选择了不播放背景音乐,那自然没必要进行下一步,即让用户选择是继续播放系统音乐还是播放背景音乐。在OnNavigatedTo函数里添加代码如下:
if (BGMbool == true && !MediaPlayer.GameHasControl )
{
MessageBoxResult result = MessageBox.Show("是否暂停当前播放的音乐以更好地体验游戏?", "当前正在播放音乐", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
MediaPlayer.Stop();
BGMbool = true;
}
else if (result == MessageBoxResult.Cancel)
{
BGMbool = false;
}
}
BGMbool 同时用来判断这时用户做出的选择。其它部分应该都看得懂,就不啰嗦了。
然后,在GamePage_Loaded函数里添加如下代码:
if (BGMbool == true)
{
bgm = contentManager.Load<Song>("BGM");
MediaPlayer.IsRepeating = true;
MediaPlayer.Volume = 0.5f;
MediaPlayer.Play(bgm);
}
bgm是我另设的一个Song类型变量,BGM是content项目里背景音乐的文件名称,即传说中的“资产名称”。这样,当用户选择了播放游戏背景音乐时,就会调用MediaPlayer播放背景音乐。由于项目加载时,GamePage_Loaded是在OnNavigatedTo之后的,所以不必担心会先不管三七二十一就播放背景音乐,如果把代码放在OnNavigatedTo函数里貌似会导致程序有点慢的样子,可以自己去试试。
最后,当程序退出时,得停止播放游戏背景音乐,同时又要保证如果播放的是系统音乐,不能把系统音乐给停止了,毕竟用的是MediaPlayer,那么就要判断一下了,在OnNavigatedFrom函数base.OnNavigatedFrom(e);前添加如下代码:
if (MediaPlayer.GameHasControl)
MediaPlayer.Stop();
OK,大功告成,这样就能比较完美地播放背景音乐了。^_^
浙公网安备 33010602011771号