cocos2d 多个背景音乐播放
来源:互联网 发布:免费动态域名解析软件 编辑:程序博客网 时间:2024/05/20 23:56
项目中,在播放背景音乐中,我遇到了,播放 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.
我就是这么解决这个问题的。
其实 这种需求 好像有点说不通 是吧。不过 我们又不能违背圣旨。。。
希望对大家有作用。逻辑上的问题都不是问题。如果大家有更好的办法,欢迎留言指导,共勉~
----------------------------------------------分割线-------------------------------------------
SimpleAudioEngine.cpp 里面的方法:
SimpleAudioEngine* getInstance(); //单例
end(); //释放对象
preloadBackgroundMusic(const char* filePath); //缓存背景音乐 (filePath 背景音乐路径)
playBackgroundMusic(const char* filePath, bool loop = false); //播放 (filePath 背景音乐路 径, loop 是否循环播放 默认为 false)
stopBackgroundMusic(bool releaseData = false); // 暂停背景音乐 是否重置数据 默认为 false
pauseBackgroundMusic(); //暂停背景音乐,home键切换到后台必调
resumeBackgroundMusic(); //从暂停处播放,一般都是从后台切换到前台调用
rewindBackgroundMusic(); //重新播放背景音乐
bool willPlayBackgroundMusic(); // 是否能播放背景音乐或者不能播放
bool isBackgroundMusicPlaying(); //背景音乐是否在播放
float getBackgroundMusicVolume(); //获取背景音乐音量大小 最大值为1.0 最小值为 0.0
setBackgroundMusicVolume(float volume); // 设置背景音乐音量大小 最大值为1.0 最小值为 0.
float getEffectsVolume(); //获取音效音量大小 最大值为1.0 最小值为 0.0
setEffectsVolume(float volume); //设置音效音量大小 最大值为1.0 最小值为 0.0
int playEffect(const char* filePath, bool loop = false,
float pitch = 1.0f, float pan = 0.0f, float gain = 1.0f); //播放音效
pauseEffect(unsigned int soundId); //切换到后台暂停播放音效
pauseAllEffects(); //暂停所有音效
resumeEffect(unsigned int soundId); //从暂停处重新播放音效
resumeAllEffects(); //重新播放音效
stopEffect(unsigned int soundId); //暂停音效
stopAllEffects(); //暂停全部音效
preloadEffect(const char* filePath); //缓存加载音效
resumeAllEffects(); //重新播放所有音效
stopEffect(unsigned int soundId); // 暂停音效
stopAllEffects(); // 暂停所有音效
preloadEffect(const char* filePath); //预加载音效
unloadEffect(const char* filePath); //卸载音效
以上就是所有的方法
都很简单,没有什么复杂的。
我想问一个问题,背景音乐居然没有提供一个播放完成的回调,如果有的话,那上面说的哪个问题也就不存在了。。。
此致 共勉~
0 0
- cocos2d 多个背景音乐播放
- Cocos2d-x 背景音乐播放
- Cocos2d-x中SimpleAudioEngine播放多个背景音乐时被覆盖的问题
- Cocos2d-x中播放背景音乐
- cocos2d-x播放背景音乐和战斗音效
- cocos2d-x 学习笔记《一》 ---------播放背景音乐
- Cocos2d-x如何播放背景音乐和音效
- cocos2d-x播放背景音乐和战斗音效
- cocos2d-x 播放背景音乐以及音效
- Cocos2d-x中停止播放背景音乐
- 插入多个背景音乐
- 播放背景音乐
- 背景音乐播放
- 背景音乐播放
- 背景音乐播放
- 背景音乐播放
- 使用cocos2d的SimpleAudioEngine播放背景音乐和音效
- cocos2d-x SimpleGame(5)如何播放背景音乐和音效
- JAVA 类型转换规则
- IE中layout
- PHP5.5,5.6以及PHP7无法加载curl库的问题解决方法
- tomcat URL不支持%2f 等 报400错误
- 练习
- cocos2d 多个背景音乐播放
- 数据库的操作
- vsl里解决strcpy编译不通过问题
- session数据保存到memcache中
- 在vb,vc中调用vb编写的DLL
- c语言 调用函数过程
- Andorid Service and WakeLock
- C#支持控制台调用的窗体程序思路
- Memcache使用方法