Cocos2d-x音乐和音效概述
你的游戏肯定会需要音乐和音效!Cocos2d-x提供了一个SimpleAudioEngine类支持游戏内的音乐和音效。它可以被用来增加背景音乐,控制游戏音效。
SimpleAuduioEngine是一个共享的单例对象,可以在代码中的任何地方通过很简单的方式获取到。以下是支持的文件格式。
支持的音乐格式:
| 平台 | 支持的常见文件格式 | 备注 |
|---|---|---|
| Android | mp3, mid, ogg, wav | 可以播放android.media.MediaPlayer所支持的所有格式 |
| iOS | aac, caf, mp3, m4a, wav | 可以播放AVAudioPlayer所支持的所有格式 |
| Windows | mid, mp3, wav | 无 |
支持的音效格式:
| 平台 | 支持的常见文件格式 | 备注 |
|---|---|---|
| Android | ogg, wav | 对wav的支持不完美 |
| iOS | caf, m4a | 可以播放Cocos2d-iPhone CocosDesion所支持的所有格式 |
| Windows | mid, wav | 无 |
背景音乐
播放背景音乐
通过下面的方式,播放一个音频文件作为背景音乐,可以控制背景音乐是否循环播放。
#include "SimpleAudioEngine.h"
using namespace CocosDenshion;
auto audio = SimpleAudioEngine::getInstance();
//设置背景音乐并不断播放它
audio->playBackgroundMusic("mymusic.mp3",true);
//设置背景音乐并只播放一次
audio->playBackgroundMusic("mymusic.mp3",false);
播放音效
通过下面的方式,将一个音频文件作为音效。
#include "SimpleAudioEngine.h"
using namespace CocosDeshion;
auto audio = SimpleAudioEngine::getInstance();
//播放音效,只播放一次
audio->playEffect("myEffect.mp3",false,1.0f,1.0f,1.0f);
声音控制
开始播放音乐和音效后,可能需要对它们进行一些控制,比如暂停、停止、恢复。
暂停
#include "SimpleAudioEngine.h"
using namespace CococsDeshion;
auto audio = SimpleAudioEngine::getInstance();
//暂停背景音乐
audio->pauseBackgroundMusic();
//暂停音效
audio->pauseEffect();
//暂停所有音效
audio->pauseAllEffects();
停止
#include "SimpleAudioEngine.h"
using namespace CocosDenshion;
auto audio = SimpleAudioEngine::getInstance();
//停止背景音乐
audio->stopBackgroundMusic();
//停止音效
audio->stopEffect();
//停止所有允许的音效
audio->stopAllEffects();
恢复
#include "SimpleAudioEngine.h"
using namespace CocosDenshion;
auto audio = SimpleAudioEngine::getInstance();
// 恢复背景音乐
audio->resumeBackgroundMusic();
// 恢复音效
audio->resumeEffect();
// 恢复所有音效
audio->resumeAllEffects();
高级声音功能
配置
移动设备上的游戏会遇到一些特殊的情景,比如游戏应用被切换至后台又切换回前台,正在玩游戏的时候电话来了,电话打完继续玩游戏,这些你再进行声音控制的时候都要考虑。
幸运的是,游戏引擎在设置的时候已经考虑到这些情景了,注意在AppDelegate.cpp中,有这样几个方法:
//当应用进程处于非活跃状态的时候会调用这个方法
void AppDelegate::applicationDidEnterBackground()
{
Director::getInstance()->stopAnimation();
// if you use SimpleAudioEngine, it must be pause
// SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
}
//当应用进程再次被激活的时候,调用这个功能
void AppDelegate::applicationWillEnterForeground()
{
Director::getInstance()->startAnimation();
// if you use SimpleAudioEngine, it must resume here
// SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
}
看到了那些被注释的代码吗?如果你有使用SimpleAudioEngine在游戏中播放声音,记得取消这些注释。当这些注释的代码生效,你的游戏就能应对刚才的场景。
预加载
加载音乐和音效通常是个耗时间的过程,为了防止由加载产生的延时导致实际播放与游戏播放不协调的现象,在播放音乐和音效前,可以预加载音乐文件。
#include "SimpleAudioEngine.h"
using namespace CocosDenshion;
auto audio = SimpleAudioEngine::getInstance();
//预先加载背景音乐和音效
audio->preloadBackgroundMusic("myMusic1.mp3");
audio->preloadBackgroundMusic("myMusic2.mp3");
audio->preloadEffect("myEffect1.mp3");
audio->preloadEffect("myEffect2.mp3");
//从缓存中卸载声音。如果你完成了一个声音,且你将不会再游戏中使用它,那么可以卸载它以释放资源。
audio->unloadEffect("myEffect1.mp3");
声音控制
可以像下面这样,通过代码控制音乐和音效的音量:
#include "SimpleAudioEngine.h"
using namespace CocosDenshion;
auto audio = SimpleAudioEngine::getInstance();
//将音量指定值设置为浮点数
audio->setEffectsVolume(0.5);
audio->setBackgroundMusicVolume(0.5);
Cocos2d-x音乐和音效概述_ufgnix0802的博客-CSDN博客
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天, 点击查看活动详情