DAxiongyouxiH 2014-08-04
Cocos2d-x提供了一个音频CocosDenshion引擎,CocosDenshion引擎可以独立于Cocos2d-x单独使用,CocosDenshion引擎本质上封装了OpenAL音频处理库。
具体使用的API是SimpleAudioEngine。SimpleAudioEngine有几个常用的函数:
void preloadBackgroundMusic (const char *pszFilePath) 预处理背景音乐文件,将压缩格式的文件进行解压处理,如MP3解压为WAV。
void playBackgroundMusic (const char *pszFilePath) 播放背景音乐。
void stopBackgroundMusic () 停止播放背景音乐。
void pauseBackgroundMusic () 暂停播放背景音乐。
void resumeBackgroundMusic () 继续播放背景音乐。
bool isBackgroundMusicPlaying () 判断背景音乐是否在播放。
unsigned int playEffect (const char *pszFilePath) 播放音效。
void pauseEffect (unsigned int nSoundId) 暂停播放音效,参数nSoundId 是playEffect函数返回ID。
void pauseAllEffects () 暂停所有播放音效。
void resumeEffect (unsigned int nSoundId) 继续播放音效,参数nSoundId 是playEffect函数返回ID。
void resumeAllEffects () 继续播放所有音效。
void stopEffect (unsigned int nSoundId) 停止播放音效,参数nSoundId 是playEffect函数返回ID。
void stopAllEffects () 停止所有播放音效。
void preloadEffect (const char *pszFilePath) 预处理音效音频文件,将压缩格式的文件进行解压处理,如MP3解压为WAV。
无论是播放背景音乐还是音效在播放之前进行预处理是有必要的,这个过程是对于音频文件进行解压等处理,预处理只需要在整个游戏运行过程中处理依次就可以了。如果不进预处理,则会发现在第一次播放这个音频文件时候感觉很“卡”,用户体验不好。
预处理相关函数有两个:preloadBackgroundMusic和preloadEffect。下面代码是预处理背景音乐和音频:
//初始化 背景音乐
SimpleAudioEngine::getInstance()->preloadBackgroundMusic("sound/Jazz.mp3");
//初始化 音效
SimpleAudioEngine::getInstance()->preloadEffect("sound/Blip.wav");
这些预处理过程代码放置到什么地方比较适合呢?由于放置到任何一个场景层中,当进入到这个层时候都比较“卡”,所以最好不要放置到场景层中,最好放置到AppDelegate文件中applicationDidFinishLaunching()函数中,代码如下。
bool AppDelegate::applicationDidFinishLaunching() {
… …
// run
director->runWithScene(scene);
//初始化 背景音乐
SimpleAudioEngine::getInstance()->preloadBackgroundMusic("sound/Jazz.mp3");
//初始化 音效
SimpleAudioEngine::getInstance()->preloadEffect("sound/Blip.wav");
return true;
}
applicationDidFinishLaunching()函数是游戏启动时候回调。在游戏启动时候,一般会有一个启动界面,启动界面一般会有一个延迟展示,这是段时间是初始化最佳时机。
《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:
京东:http://item.jd.com/11584534.html
当当:http://product.dangdang.com/23606265.html
互动出版网:http://product.china-pub.com/3770734
《Cocos2d-x实战 C++卷》源码及样章下载地址:
源码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1
样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1
进入场景而且过渡动画结束时候触发。提示 GameScene场景中的继承于节点,这些生命周期事件根本上是从Node继承而来。事实上所有Node对象都有这些事件,具体实现代码与GameScene场景类似。
进入场景而且过渡动画结束时候触发。提示 GameScene场景中的继承于节点,这些生命周期事件根本上是从Node继承而来。事实上所有Node对象都有这些事件,具体实现代码与GameScene场景类似。