【cocos2d-x入门实战】微信飞机大战之十四:背景音乐和音效
2014-02-10 09:44
423 查看
1.音乐格式
官方文档中是这么写的:1 2 3 4 | Android:在android上CocosDenshion能支持的音频格式是对应于android.media.MediaPlayer所支持的格式。 iOS:在IOS上面Cocos2d-x的CocosDenshion所支持的格式和Cocos2d-iphone中所支持的是一样,mp3,caf是推荐的格式。 windows:.mid, .wav are supported. Note that mp3 is not supported. Marmalade:mp3 |
2.背景音乐
背景音乐在整个游戏中,同一时间只能有一个。(1)加入头文件,使用命名空间
1 2 | #include "SimpleAudioEngine.h" using namespace CocosDenshion;//很多人少了这一步导致找不到SimpleAudioEngine |
1 | CocosDenshion::SimpleAudioEngine |
我们在WelcomeScene中预加载背景音乐,其实这一步木有用,后面解释到。
1 | SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("sound/game_music.mp3"); |
1 2 3 4 | SimpleAudioEngine::sharedEngine()->playBackgroundMusic("sound/game_music.mp3",true);//开始播放背景音乐,true表示循环 SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();//停止背景音乐,这是一个缺省参数函数,传参表示是否释放音乐文件 SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();//暂停背景音乐 SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();//重头调用背景音乐 SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()//返回布尔型参数,表示是否在放着背景音乐 SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);//设置音量0.0-1.0 |
3.游戏音效
游戏音效是可以重叠的。(1)一样的头文件和命名空间
(2)预加载音效
1 | SimpleAudioEngine::sharedEngine()->preloadEffect("sound/bullet.mp3"); |
1 2 3 4 | SimpleAudioEngine::sharedEngine()->playEffect("sound/bullet.mp3",false);//开始播放背景音效,false表示不循环 SimpleAudioEngine::sharedEngine()->stopEffect(m_nSoundId);//停止音效,可以选择单独停掉一个音效,这个值是由playEffect返回的 SimpleAudioEngine::sharedEngine()->stopAllEffects();//停止全部音效 SimpleAudioEngine::sharedEngine()->pauseEffect(m_nSoundId);//暂停单个音效 SimpleAudioEngine::sharedEngine()->resumeEffect(m_nSoundId);//重新开始音效 SimpleAudioEngine::sharedEngine()->pauseAllEffects();//暂停全部音效 SimpleAudioEngine::sharedEngine()->resumeAllEffects();//重新开始全部音效 SimpleAudioEngine::sharedEngine()->setEffectsVolume(0.5);//设置音效音量0.0-1.0 SimpleAudioEngine::sharedEngine()->unloadEffect("sound/bullet.mp3");//卸载音效 |
4.释放资源
查看SimpleAudioEngine的源码,我们可以发现,在preloadEffect()的时候,引擎会把音效加到1 | static EffectList s_List; |
所以在使用结束后,要记得释放掉音效资源,调用:
1 | void SimpleAudioEngine::end() |
而我们再看看preloadBackgroundMusic()的实现:
1 2 | void SimpleAudioEngine::preloadBackgroundMusic(const char* pszFilePath) { } |
再看playBackgroundMusic()源码:
1 2 3 4 | void SimpleAudioEngine::playBackgroundMusic(const char* pszFilePath, bool bLoop) { if (! pszFilePath) { return; } sharedMusic().Open(_FullPath(pszFilePath), _Hash(pszFilePath)); sharedMusic().Play((bLoop) ? -1 : 1); } |
其实有兴趣的同学可以模仿音效那样,把preloadBackgroundMusic实现了(先载入内存),然后再play的时候直接播放,这样效率会快多了。没理解源码的意思,难道是攻城狮忙着打灰机没空写么?
效果图
这一节没有效果图,自行脑补吧。。。
声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息
原文作者: fusijie
原文地址: http://my.eoe.cn/fusijie/archive/21183.html
相关文章推荐
- 【cocos2d-x入门实战】微信飞机大战之十四:背景音乐和音效
- 【cocos2d-x入门实战】微信飞机大战之五:批次渲染
- [置顶] 【cocos2d-x入门实战】微信飞机大战之六:子弹层的处理
- [置顶] 【cocos2d-x入门实战】微信飞机大战之十二:分数的本地存储
- 【cocos2d-x入门实战】微信飞机大战讲解
- 【cocos2d-x入门实战】微信飞机大战之十二:分数的本地存储
- [置顶] 【cocos2d-x入门实战】微信飞机大战之二:别急,先处理好CCScene和CCLayer的关系
- 【cocos2d-x入门实战】微信飞机大战之十一:游戏暂停和触摸屏蔽
- 【cocos2d-x入门实战】微信飞机大战之二:别急,先处理好CCScene和CCLayer的关系
- 【cocos2d-x入门实战】微信飞机大战来袭!
- 【cocos2d-x入门实战】微信飞机大战之三:引擎坐标系,锚点和背景滚动
- 【cocos2d-x入门实战】背景音乐和音效
- [置顶] 【cocos2d-x入门实战】微信飞机大战之四:飞机登场咯
- 【cocos2d-x入门实战】微信飞机大战之六:子弹层的处理
- 【cocos2d-x入门实战】背景音乐和音效
- 【cocos2d-x入门实战】微信飞机大战之八:自定义敌机精灵
- 【cocos2d-x入门实战】微信飞机大战之一:搞个飞机来玩玩
- [置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
- 【cocos2d-x入门实战】微信飞机大战之十:UFO层特殊道具
- 【cocos2d-x入门实战】微信飞机大战之四:主角的登场和帧动画