最近研究了下cocos2d-x声音
网上也翻了一些帖子
1.首先,格式的支持:可参照帖子http://article.ityran.com/archives/3627
不得不说的是格式是分平台的,有些平台不支持某种格式还是比较蛋疼的事,所以呢,还是选通用点的格式吧
mid在windows上可以,忘记有没有问题了,貌似中断什么的可能有问题~以后测试下吧
不过mid在android上是有问题的
所以背景音乐还是选mp3吧,mp3是压缩格式,表现力还是不错的~
2.其次,关于音乐的调用,网上有很多帖子都有说明,不多说,发个参考贴:http://blog.csdn.net/aa4790139/article/details/8140083
之所以发这个参考贴是觉得作者写的相对来说比较详细~
看完帖子,本人发现几个问题:
1)音效有释放的方法,但背景音乐没有~~为什么?如果有人知道要告诉我哈,THX~
2)背景音乐有判断是否在播放的方法,但是音效没有...不过这个有人写了帖子,自己加了方法,但是这个方法该了源码,有需要的可以参考下。帖子地址:http://blog.sina.com.cn/s/blog_61ece09901014ljt.html
3)发现网上大部分帖子最后都有会写释放声音:
SimpleAudioEngine::sharedEngine()->end();
这个可以写到AppDelegate的析构函数里
AppDelegate::~AppDelegate()
{
SimpleAudioEngine::sharedEngine()->end();
}
3.最后关于声音的中断
在接电话,或者按home键切出去的时候,声音会中断,但是如果处理的不好会有一些bug
cocos2d-x在游戏中断时在AppDelegate对声音已经做了处理
// This function will be called when the app is inactive. When comes a phone call,it's be invoked too
void AppDelegate::applicationDidEnterBackground()
{
CCDirector::sharedDirector()->pause();
// if you use SimpleAudioEngine, it must be pause
// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground()
{
CCDirector::sharedDirector()->resume();
// if you use SimpleAudioEngine, it must resume here
// SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}
不过其注释掉了~打开即开,不过如果你对声音有自己的处理话,这里可能会有一些bug哦~
比如说你暂停了背景音乐
这时候中断了,cocos2d-x暂停了背景音乐,回来时cocos2d-x又恢复了背景音乐~可不就bug了么
所以这里要加上自己的判断
if(isBackgroundMusicOpen)
{
SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}