频道栏目
读书频道 > 移动开发 > 其他综合 > Cocos2D-X游戏开发技术精解(第2版)
8.4 CocosDenshion声音模块
2015-11-25 13:56:20     我来说两句
收藏   我要投稿
本书共15章,主要内容有:Cocos2D-X引擎介绍;如何建立跨平台的开发环境;了解引擎的核心模块—渲染框架;介绍如何将动态画面,呈现给玩家等动作功能;用户交互;二维游戏中背景的实现方法和技术;Box2D物理引擎  立即去当当网订购

CocosDenshion声音模块在Cocos2D-X引擎中是一个非常独立的内容。读者甚至可以将其看成是一款跨平台的声音引擎。虽然它也是由引擎的开发者编写的,但是它拥有自己的开源声明、目录代码以及示例项目。这样做的好处,一个独立的声音模块,可以更方便维护升级,也更容易被替换。

与Cocos2D-X引擎的源代码相比,CocosDenshion内容就少了许多。声音模块包含了大约四个类左右。虽然内容少了,但其依然保持了引擎的模式结构和编码风格。

对于大多数开发者来讲,游戏中操作声音方式,无非就是播放背景音乐和音效。因此为了节省开发者编码工作,CocosDenshion代码结构的设计采用了外观模式和单例模式。图8-2展示了CocosDenshionde声音模块的代码结构。



 

SimpleAudioEngine是一个典型的外观模式,而SimpleAudioEngine、CDAudioManager和CDSoundManager则使用了单例模式。

作为开发者只需要熟悉类SimpleAudioEngine的函数方法,而无需关心CDAudioManager和CDSoundManager的内容。这就是外观模式的好处。它为开发者提供了简单的上层函数接口,隐藏了具体底层的实现方式。然后在引擎当中,不同平台采用了不同的实现技术。比如在iOS平台中使用了OpenAL声音库,而在Android平台则使用了OpenSL声音库,其他平台也使用了各自的声音库。

CDSoundEngine、CDAudioManager两个类提供了操作和管理声音的功能。具体它们是如何工作的,这里就不再讨论了,感兴趣的读者可以自行去研究相关代码。

CocosDenshion针对不同的平台已经封装了低级的操作声音的API,但是对于开发者来讲,其想要了解系统内部是如何协作来完成声音处理任务的。这样会加大开发者使用的难度,同时,也降低了声音模块的灵活性。假如需要升级内部实现的功能,就有可能会影响到已经完成的代码。由此引擎的设计者,巧妙地采用了外观模式与单例模式的混合。

注意:SimpleAudioEngine并没有增加任何功能,而只是把声音操作类进行组合来完成一些常用的功能,为开发者提供简化的函数接口。

单例模式保证了在游戏当中只存在一个处理声音的对象。这样方便开发者在游戏各处的可以操作声音。众所周知,从游戏的开始到结束都会一直伴随着各种各样的声音。因此在开发者编写代码中也会存在许多调用声音功能的地方。单例模式就提供了这种随处调用的便利方式。

注意:单例模式有其便利的地方,也有麻烦的问题。过多的或者不太合理的调用也容易让人迷惑。

跨平台引擎总是要考虑更多的问题。CocosDenshion也不例外。读者可以查看引擎目录下的CocosDenshion文件夹。在此文件夹内,就存放着不同平台的声音实现方式的源代码。这与之前介绍用户交互类似,在Android平台需要使用Java编码,而Mac与iOS则会用到Objective-C编码,只有Linux和Win32仅用了C\C++的编码。各个平台具体的实现方法,读者可以自行查看源代码。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:8.3 声音格式
下一篇:8.5 背景音乐操作函数
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站