项目中,在播放背景音乐中,我遇到了,播放 music1, music2,先播放music1,等播放完后循环播放music2 。
一开始看到需求的时候,我以为还是很简单的,当我看到 SimpleAudioEngine 并不支持 播放完成后并不没有回调 ,那意味着必须得自己写回调。我想到了二种方案。(大家有什么好办法欢迎留言指出)。
1。延迟播放 譬如 弄一个 delay 播放。
2。在update里面,每一秒 调用 isBackgroundMusicPlaying 判断第一收是否播放完成
然后我选择了 第二种,在每一秒我都会去判断 背景音乐是否还在播放,如果没有播放,则循环播放第二首背景音乐。
然而 却另外发现了个问题,(IOS没有问题,android有),当 如果在刚开始 播放第一首的时候,home键切换到后台,会出现播放第二首,因为 切换后台的某一瞬间,第一首播放暂停了,然后又播放了第二首,第二首却没有调用stop music。导致切换到后台也会继续播放第二首。
这种问题解决办法也是有的。 播放都是调用到了 android 代码。我们可以确定,按 home键的时候,肯定会先调用 pauseBackgroundMusic 在 调用 isBackgroundMusicPlaying 。所以在Cocos2dxMusic.java 中 home 键的调用 pauseBackgroundMusic 暂停 时,我们会标识一个 boolean 类型的变量,默认为 false ,进了 pauseBackgroundMusic 后 值为 true ,当我们在调用 isBackgroundMusicPlaying 时,如果 这个标识为 true 那么 我们完全可以不让它继续往下播放了。记得 从 后台切换到前台的时候 调用 resumeBackgroundMusic ,把标识设置为 false.