Cocos2d-x中使用音频CocosDenshion引擎介绍与音频文件的预处理

Cocos2d-x中使用音频CocosDenshion引擎介绍与音频文件的预处理

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

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系列图书
《Cocos2d-x实战(卷Ⅰ):C++开发》
本书交流讨论站点:
http://www.cocoagame.net
欢迎添�cocos2d-x技术讨论群:257760386、
327403678

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118594.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 最新最全Golang面试题(精通篇)

    最新最全Golang面试题(精通篇)Golang面试问题汇总通常我们去面试肯定会有些不错的Golang的面试题目的,所以总结下,让其他Golang开发者也可以查看到,同时也用来检测自己的能力和提醒自己的不足之处,欢迎大家补充和提交新的面试题目.1.Golang中除了加Mutex锁以外还有哪些方式安全读写共享变量Golang中Goroutine可以通过Channel进行安全读写共享变量,还可以通过原子性操作进行.2.无缓冲Chan的发送和接收是否同步ch:=make(chanint)无缓冲的channel由于没有缓

    2022年6月25日
    23
  • navicat连接mysql失败是什么原因?_mysql1045错误代码

    navicat连接mysql失败是什么原因?_mysql1045错误代码1:2003错误不能连接到mysql服务解决方法:在Windows服务中将mysql服务手动打开或右键设置为开机延迟启动(连接失败一次后再连接即可成功连接)后续待补充

    2022年10月14日
    3
  • 导航上显示某个地点已关闭什么意思_大众MIB(275)教程之导航使用「建议收藏」

    导航上显示某个地点已关闭什么意思_大众MIB(275)教程之导航使用「建议收藏」大众可以说近几年的发展非常快,仅车载收音机都更换了好几代了。从最初的单纯收音机到后来的6碟CD机RCD510,最初国内上市的导航RNS510,还有后来自带蓝牙的RNS315,再到PQ平台187A,当初抄的也是火的很几乎每天都能看到187A的帖子,直到出现了升级版的187B,这个自带carplay和百度canlife的PQ平台的机器一下将老款车型导航的改装推上了最巅峰,也把一款拆车机…

    2022年5月7日
    84
  • jquery中失去焦点事件_easyui失去焦点事件没触发

    jquery中失去焦点事件_easyui失去焦点事件没触发触发焦点:$("Element").focus()触发每一个匹配元素获得焦点事件。$("Element").focus(function)事件会在获得焦

    2022年8月4日
    8
  • 贝塔分布和三角分布_狄利克雷函数是什么

    贝塔分布和三角分布_狄利克雷函数是什么文章目录0.补充知识0.1贝塔函数B(P,Q)\Beta(P,Q)B(P,Q)0.2伽马函数Γ(x)\Gamma(x)Γ(x)1.贝塔分布(BetaDistribution)1.1概率密度函数PDF1.2累积分布函数CDF1.3数字特征2.狄利克雷分布(DirichletDistribution)2.1概率密度函数PDF2.2数字特征0.补充知识0.1贝塔函数B(P,Q)\Beta(P,Q)B(P,Q)贝塔函数也称为欧拉第一积分,定义为:B(P,Q)=∫01

    2025年6月28日
    3
  • jetty和tomcat优势比较

    jetty和tomcat优势比较Jetty 和 tomcat 的比较 nbsp 相同点 1 nbsp nbsp nbsp nbsp nbsp nbsp Tomcat 和 Jetty 都是一种 Servlet 引擎 他们都支持标准的 servlet 规范和 JavaEE 的规范 nbsp nbsp 不同点 1 nbsp nbsp nbsp nbsp nbsp nbsp 架构比较 Jetty 的架构比 Tomcat 的更为简单 Jetty 的架构是基于 Handler 来实现的 主要的扩展功能都可以用 Handler 来实现

    2025年7月22日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号