Cocos2d-x音乐和音效概述

343 阅读3分钟

Cocos2d-x音乐和音效概述

  你的游戏肯定会需要音乐和音效!Cocos2d-x提供了一个SimpleAudioEngine类支持游戏内的音乐和音效。它可以被用来增加背景音乐,控制游戏音效。

  SimpleAuduioEngine是一个共享的单例对象,可以在代码中的任何地方通过很简单的方式获取到。以下是支持的文件格式。

  支持的音乐格式:

平台支持的常见文件格式备注
Androidmp3, mid, ogg, wav可以播放android.media.MediaPlayer所支持的所有格式
iOSaac, caf, mp3, m4a, wav可以播放AVAudioPlayer所支持的所有格式
Windowsmid, mp3, wav

  支持的音效格式:

平台支持的常见文件格式备注
Androidogg, wav对wav的支持不完美
iOScaf, m4a可以播放Cocos2d-iPhone CocosDesion所支持的所有格式
Windowsmid, 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 天,      点击查看活动详情