原创作品,转载请标明http://blog.csdn.net/jackystudio/article/details/12117827

整个游戏完成了,可以痛快的在电脑上打飞机了!可是感觉少了点什么?

对了,背景音乐和游戏音效。还记得最初我们在创建cocos2dx工程的时候有一步要勾选的选项吗?SimpleAudioEngine!没错就是它。

1.音乐格式

官方文档中是这么写的:

Android:在android上CocosDenshion能支持的音频格式是对应于android.media.MediaPlayer所支持的格式。
iOS:在IOS上面Cocos2d-x的CocosDenshion所支持的格式和Cocos2d-iphone中所支持的是一样,mp3,caf是推荐的格式。
windows:.mid, .wav are supported. Note that mp3 is not supported.
Marmalade:mp3

说是windows不支持mp3,但是实际使用的时候,发现mp3也是可以正常在windows下播放的。

2.背景音乐

背景音乐在整个游戏中,同一时间只能有一个。

(1)加入头文件,使用命名空间

 #include "SimpleAudioEngine.h"using namespace CocosDenshion;//很多人少了这一步导致找不到SimpleAudioEngine

当然也可以在使用SimpleAudioEngine时这么写:

 CocosDenshion::SimpleAudioEngine

(2)预加载背景音乐

我们在WelcomeScene中预加载背景音乐,其实这一步木有用,后面解释到。

SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("sound/game_music.mp3");

(3)背景音乐的其他API

SimpleAudioEngine::sharedEngine()->playBackgroundMusic("sound/game_music.mp3",true);//开始播放背景音乐,true表示循环
SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();//停止背景音乐,这是一个缺省参数函数,传参表示是否释放音乐文件
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();//暂停背景音乐
SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();//重头调用背景音乐
SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()//返回布尔型参数,表示是否在放着背景音乐
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);//设置音量0.0-1.0

至于在游戏过程中,要在暂停,结束之类的地方哪里控制我就不说了,看你们的喜好了。

3.游戏音效

游戏音效是可以重叠的。

(1)一样的头文件和命名空间

(2)预加载音效

SimpleAudioEngine::sharedEngine()->preloadEffect("sound/bullet.mp3");

(3)游戏音效的其他API

SimpleAudioEngine::sharedEngine()->playEffect("sound/bullet.mp3",false);//开始播放背景音效,false表示不循环
SimpleAudioEngine::sharedEngine()->stopEffect(m_nSoundId);//停止音效,可以选择单独停掉一个音效,这个值是由playEffect返回的
SimpleAudioEngine::sharedEngine()->stopAllEffects();//停止全部音效
SimpleAudioEngine::sharedEngine()->pauseEffect(m_nSoundId);//暂停单个音效
SimpleAudioEngine::sharedEngine()->resumeEffect(m_nSoundId);//重新开始音效
SimpleAudioEngine::sharedEngine()->pauseAllEffects();//暂停全部音效
SimpleAudioEngine::sharedEngine()->resumeAllEffects();//重新开始全部音效
SimpleAudioEngine::sharedEngine()->setEffectsVolume(0.5);//设置音效音量0.0-1.0
SimpleAudioEngine::sharedEngine()->unloadEffect("sound/bullet.mp3");//卸载音效

4.释放资源

查看SimpleAudioEngine的源码,我们可以发现,在preloadEffect()的时候,引擎会把音效加到

static EffectList s_List;

其中EffectList是一个map,包含了音效文件和由它获得的一个hash值。因此载入内存后可以提高音效的加载效率。

所以在使用结束后,要记得释放掉音效资源,调用:

void SimpleAudioEngine::end()

就可以把s_List所指向的音乐资源释放掉。

而我们再看看preloadBackgroundMusic()的实现:

void SimpleAudioEngine::preloadBackgroundMusic(const char* pszFilePath)
{}

尼玛,竟然是空实现。。。负分滚粗。。。

再看playBackgroundMusic()源码:

void SimpleAudioEngine::playBackgroundMusic(const char* pszFilePath, bool bLoop)
{if (! pszFilePath){return;}sharedMusic().Open(_FullPath(pszFilePath), _Hash(pszFilePath));sharedMusic().Play((bLoop) ? -1 : 1);
}

背景音乐这货竟然是play的时候才载入。。。好吧,你赢了。。。

其实有兴趣的同学可以模仿音效那样,把preloadBackgroundMusic实现了(先载入内存),然后再play的时候直接播放,这样效率会快多了。没理解源码的意思,难道是攻城狮忙着打灰机没空写么?

效果图


这一节没有效果图,自行脑补吧。。。





【cocos2d-x入门实战】微信飞机大战之十四:背景音乐和音效相关推荐

  1. Unity游戏开发官方入门教程:飞机大战(十)——敌人的爆炸和移动

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  2. 【cocos2d-x入门实战】微信飞机大战之十:UFO层特殊道具

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/11961795 游戏的趣味性就在于不时的给你一些惊喜.当然如果只是简单的子弹打 ...

  3. Unity游戏开发官方入门教程:飞机大战(六)——创建子弹

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  4. Unity游戏开发官方入门教程:飞机大战(二)——创建飞船对象

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  5. Unity游戏开发官方入门教程:飞机大战(五)——实现飞船控制脚本

    Unity版本:Unity 2018.2.14f1 原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial 教程目录 ...

  6. 【三】仿微信飞机大战cocos2d-x3.0rc1

    上一篇:[二]仿微信飞机大战cocos2d-x3.0rc1 今天的任务是: 1.我机子弹无限量发射 2.三种类型敌机的出现 3.敌机自己碰墙死掉 一.效果界面展示 暂时没有实现子弹打中敌机 二.工程解 ...

  7. cocos2d-x-3.3-022-仿微信飞机大战-开篇介绍

    原文同步发布于我的wiki,查看原文或更新请移步: 点击打开链接 写在最前面 微信飞机大战,触控的大神JackyStudio 已经在他的专栏微信飞机大战讲解中完整细致的实现了一遍,基于cocos2d- ...

  8. 【C语言游戏】微信飞机大战 | PlaneFight(EasyX,drawAlpha绘制透明贴图,计时器,计帧器,游戏难度自动调整,接受鼠标消息,源码素材免费分享)

    一.数据结构介绍 struct aircraft //所有飞机的结构体 typedef struct aircraft{ int type;//飞机类型 int HP;//剩余血量 int bomb_ ...

  9. Java Swing 经典小游戏《飞机大战》———— (四)碰撞检测 游戏状态与得分 玩家升级

    前期回顾 Java Swing 经典小游戏<飞机大战>---- (一)获取素材,创建窗口,添加滚动背景,双缓冲 Java Swing 经典小游戏<飞机大战>---- (二)玩家 ...

最新文章

  1. python元组用法详解(定义、下表查找、index()、count()、len())
  2. 【事务】特性、安全保障及实现
  3. 当亿级流量App开始“玩”,到底在玩什么?
  4. 1036 跟奥巴马一起编程 (15 分)(c++)C++
  5. VisualGDB for Linux 安装配置
  6. 谷歌浏览器开发调试工具中Sources面板 js调试等 完全介绍
  7. SCVMM2008 R2 SP1 物理机实战P2V迁移主机 Step By Step.
  8. Linux工作笔记039---CentOS8.2卸载mysql
  9. 【图像去噪】基于matlab邻域的自适应小波阈值图像去噪【含Matlab源码 1188期】
  10. 计算机软件测试方法文献,软件测试毕业论文参考文献
  11. vue 实现图片预览放大以及缩小
  12. java基本数据从低到高_java基本数据类型之间的转换
  13. lpx寒假作业案例14
  14. Linux遇到删除不掉的文件或者文件夹解决办法
  15. Exchange 2013 启用反垃圾邮件功能
  16. Micropython八位共阴数码管驱动模块分享
  17. pe服务器制作教程,WINPE系统制作原理教程介绍
  18. 如何实现只有一个路由器不同网段pc间的互通
  19. 还在手写CURD代码?这三件套任意一套都能免去手写CURD确定不来看看?——JPA+MP+TK 免手写CURD三件套
  20. ch.ethz.ganymed包ganymed-ssh2的使用

热门文章

  1. 关于心跳包的实现手法
  2. UVA 12325 宝箱 Zombie‘s Treasure Chest
  3. 07.RabbitMQ处理幂等性
  4. Linux_计划任务
  5. dso详解--dso原理
  6. 大学计算机基础知识电子版,大学计算机基础考试知识点(完整版).pdf
  7. Python数据分析上机
  8. Python3读写txt文件
  9. python众数问题给定含有n个元素的多重集合s_ACM题目:众数给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为众数...
  10. ACPI Spec Chapter 10 Power Source And Power Meter Devices