Cocos2d-x开发者指南11:音频
一款开发精良的游戏往往离不开精心制作的声音效果。在Cocos2d-x中,提供了一个名为SimpleAudioEngine的音频引擎,它能够在游戏中播放背景音效以及游戏音效。SimpleAudioEngine是一个共享的单例对象,这意味着你可以在程序的任意地方调用它。即便在一个HelloWorld工程中,也能很方便地使用该引擎。SimpleAudioEngine支持多种格式的音频,例如MP3和CAF(Core Audio Format)。
新手入门
SimpleAudioEngine API的使用较为简单,下面将详细介绍其常见功能的使用方法。
播放背景音乐
你可以选择一个音频文件作为背景音乐,该文件可以设置为单曲循环播放或者只播放一次。示例代码如下:
auto audio = SimpleAudioEngine::getInstance();
// 设置背景音乐并持续循环播放
audio->playBackgroundMusic("mymusic.mp3", true);
// 设置背景音乐并仅播放一次
audio->playBackgroundMusic("mymusic.mp3", false);
播放音效
播放音效的方法如下:
auto audio = SimpleAudioEngine::getInstance();
// 播放一次音效
audio->playEffect("myEffect.mp3", false, 1.0f, 1.0f, 1.0f);
暂停、停止、恢复音乐和音效的播放
在播放音乐和音效时,我们常常需要对它们进行暂停、停止或者恢复操作,这些操作实现起来相对简单。
暂停
auto audio = SimpleAudioEngine::getInstance();
// 暂停背景音乐
audio->pauseBackgroundMusic();
// 暂停一个音效
audio->pauseEffect();
// 暂停所有音效
audio->pauseAllEffects();
停止
auto audio = SimpleAudioEngine::getInstance();
// 停止背景音乐
audio->stopBackgroundMusic();
// 停止一个音效
audio->stopEffect();
// 停止所有正在运行的音效
audio->stopAllEffects();
恢复
auto audio = SimpleAudioEngine::getInstance();
// 恢复背景音乐
audio->resumeBackgroundMusic();
// 恢复一个音效
audio->resumeEffect();
// 恢复所有音效
audio->resumeAllEffects();
音频高级功能
设置
SimpleAudioEngine的API虽然简单,但在游戏中使用时,尤其是在手机和平板等移动设备中使用时,有一些注意事项。例如,在多个APP中切换时,或者当玩游戏时有电话打进来时,需要对音频播放进行相应处理。幸运的是,引擎已经为我们考虑到了这些异常情况,我们只需按照相应的方法进行设置即可。
在AppDelegate.cpp中,需要注意以下几个方法:
// 当应用程序进入后台时,此函数将被调用,来电时也会触发
void AppDelegate::applicationDidEnterBackground() {
Director::getInstance()->stopAnimation();
// 如果你使用SimpleAudioEngine,必须暂停背景音乐
// SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
}
// 当应用程序重新进入前台时,此函数将被调用
void AppDelegate::applicationWillEnterForeground() {
Director::getInstance()->startAnimation();
// 如果你使用SimpleAudioEngine,必须在此处恢复背景音乐
// SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
}
如果你要使用SimpleAudioEngine实现背景音乐和音效,需要去掉代码中有用代码的注释。
预加载音效
当游戏开始时,你可以预加载一些音效到内存中,这样在需要使用它们时就能随时播放。示例代码如下:
auto audio = SimpleAudioEngine::getInstance();
// 预加载背景音乐和音效。你可以在应用启动时预加载音效,以便在需要使用时已经加载完成
audio->preloadBackgroundMusic("myMusic1.mp3");
audio->preloadBackgroundMusic("myMusic2.mp3");
audio->preloadEffect("myEffect1.mp3");
audio->preloadEffect("myEffect2.mp3");
// 从缓存中卸载音效。如果你已经使用完某个音效,并且在游戏中不会再使用它,可以卸载以释放资源
audio->unloadEffect("myEffect1.mp3");
音量控制
你可以通过程序控制来增大或减小音量。示例代码如下:
auto audio = SimpleAudioEngine::getInstance();
// 设置音效音量,指定值为浮点数
audio->setEffectsVolume(5.0f);