Cocos2d-x开发者指南11:音频

2015年03月22日 10:40 0 点赞 0 评论 更新于 2025-11-21 18:05

一款开发精良的游戏往往离不开精心制作的声音效果。在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);

作者信息

boke

boke

共发布了 3994 篇文章