第1章 Cocos2D-X 引擎的介绍
如果你梦想着创造充满了价值和理念的世界,那么本书将会介绍一个帮你实现梦想的绝佳途径。
游戏正在改变世界,改变人们的生活。它甚至被赋予了神圣的使命——重塑人类积极的未来。在游戏当中,人们可以感觉到平等、充实和愉悦。游戏让人们的交际更加真实、深入和多元。游戏让娱乐业有更大的发展空间,有更多的经济收益,有更具想象力的挑战。通过本书的学习,读者将会掌握制作游戏的本领。制作游戏的过程,充满了兴奋和喜悦。相信阅读本书的读者中,每一个人都是喜欢游戏的,也喜欢创造和编写游戏。
本章作为开篇的第一章,将会为读者介绍游戏引擎的概念。作为游戏制作的核心,引擎发挥着极其重要的作用。在众多游戏引擎当中,我们选择了一款跨平台支持的2D游戏引擎——Cocos2D-X。它绝对是移动平台最火热的游戏引擎。通过介绍其形成的历史、背景以及组成结构,让大家对游戏引擎,尤其是Cocos2D-X有整体的认识,知道一款游戏引擎需要具备哪些功能,Cocos2D-X游戏引擎的特点在于哪里,还会涉及一些引擎的安装与使用指南。最后,必须要说明的是,Cocos2D-X 是一款免费开源的游戏引擎。
1.1 何为游戏引擎
什么是游戏引擎?提到“引擎”一词,很容易想到汽车、轮船以及飞机。这些由机器驱动的交通工具,其能量的来源就是引擎。游戏引擎和汽车引擎在概念上是一样的,都是驱动整体运转的核心部件。游戏产品的核心就是引擎,它是每款游戏的运行基础。引擎的好坏直接影响着游戏的品质。
1.1.1 游戏的核心——引擎
引擎的概念应该是来自机器制造。它通常作为机器设备的动力核心,所以有人将引擎称作发动机。引擎最大的作用,就是能够为依附于它的部件提供能量。引擎对于机器的重要性不言而喻。如果以人体为比喻的话,引擎就好比心脏。试想一下没有了心脏,人就无法存活。同样,汽车没有了引擎,也只能依靠人推马拉。不过,就像心脏可以移植,引擎也是可以更换的。一辆好车,一定要配有一个强劲的引擎。图1-1所示的就是一款跑车的引擎。单看其十缸的结构就能知道这是一款性能卓越的引擎。
图 1-1 所示的引擎,是人类工业化艺术的最好呈现。现在汽车引擎的鼻祖是工业革命时人类发明的内燃机。如今的汽车引擎都是以燃油为主,也有使用混合动力的。由内燃机发展至汽车引擎,人们大约用了二十年的时间,在二十年间经历了无数次的技术革新。其实每一次技术的变革都不是突然发生、毫无根据的,而是制作行业发展到一定规模才出现的。因此引擎并不是上帝赐给人们的礼物,也不是来源于自然的神奇生命,而是人们知识的结晶。
图1-1 汽车引擎
对于游戏引擎,也是同样的道理。引擎也是一款游戏的核心,它为游戏中其他部分提供了功能服务。没有了强劲引擎的支持,游戏将会逊色许多,甚至遭到玩家的遗弃。许多老旧游戏产品的命运就是如此。从世界上第一款游戏算起,至今也有三十年的时间了。在这期间游戏引擎的发展,也是逐渐形成、不断地推陈出新的过程。
说明:在电子游戏初期,并没有核心引擎。引擎是在游戏技术发展了一段时间后产生的。
综上所述,无论是汽车引擎,还是游戏引擎,其制作技术仍然在不断地推陈出新。从早期简单、局限、低效,到如今丰富、开放、高效,经过了许许多多开发者的辛勤工作。更少的损耗、更高的性能,这正是引擎设计与制作一直追求的目标。
虽然引擎是一辆汽车的重要部件,但它并不是整辆汽车。事实是引擎是一个独立的部件,是能够从汽车里面取出的发动机。工人可以建造另外一个外壳,再将引擎安装入内,这就产生了一辆新的汽车。所以说引擎作为核心部件,是可以更换,也可以重复使用的。
游戏中的引擎也是如此。作为游戏的核心,它并不是游戏的全部。一款优秀的游戏引擎经常被用来制作很多游戏产品。这些产品在市场上将单独出售。因此为了保证引擎的通用性和标准化,引擎需要具备让游戏运行的基本功能,但不能含有游戏特有的功能。所以一款好的游戏引擎应该可以轻易地更新换代,同时又可以重复利用。
说明:有些引擎为了宣传效果,会使用和游戏相同的名字,比如 Quake,致使许多人会混淆游戏引擎和游戏本身。
1.1.2 引擎的特点
在前面的介绍中,读者知道了引擎的作用。在游戏和汽车中引擎有很多类似的概念。但是游戏引擎也有很多自身的特点。下面我们通过游戏引擎产生的过程,来了解它的特点。
正如前面所说,游戏引擎并不是一开始就有的,也是通过了技术发展与革新的。游戏引擎的概念首次出现在1990年idSoftware发行的《Doom》游戏当中。为了更好地展现游戏魅力,《Doom》开发者约翰·卡马克将其建立在一个性能优秀的内核之上。当时的游戏内核具备三个主要功能:游戏中画面的渲染、物体之间的碰撞以及音乐音效的播放。
说明:正是因为上述的原因,约翰·卡马克被大家习惯地称为游戏引擎之父。
卡马克意识到内核所提供的功能完全可以脱离游戏而独立存在,内核可以重复利用,作为今后其他游戏产品的内核。于是,他就把游戏中给玩家带来直观感觉的内容剥离掉,其中包括:图片数据、逻辑运算、游戏规则等,那么余下的内容就是重复利用的核心部分。这个核心部分后来就被定义为“引擎”。当然,具体工作可不是两句话这么简单。从那之后,由于引擎的诞生,游戏制作领域就进入了一个崭新的时代。开发者开创了一种全新的游戏开发模式:游戏“引擎”开发。
引擎开发方式逐渐取代了原本一体化的开发方式。早期游戏制作时,一款游戏由许多的模块构成,它们紧密地结合很难单独拆分出来。这就导致原本的游戏产品除了升级优化,推出后续版本之外,别无他用了。当需要准备制作新的游戏时,并没有多少可以再次利用的功能。而引擎化的开发方式,则克服了低利用率的缺陷,充分利用开发者的工作成果。这种模块化、封装化以及良好扩展性的游戏开发方式,逐渐成为了主流。
如今开发者几乎都会使用引擎来制作游戏,很少有使用一体化开发游戏方式的了。那么选择一款优秀的游戏引擎,就成为游戏制作之前的首要目的了。怎样才算优秀的游戏引擎呢?作为第一次接触游戏开发的读者来说,很难作出决定。下面来介绍一些游戏引擎的特性作为参考。
说明:有些独立游戏开发者为了自娱自乐,仍然热衷于一体化开发方式。
(1)稳定压倒一切!游戏引擎首要标准就是稳定,必须能够保证游戏产品的顺畅运行。引擎为玩家提供稳定连续的游玩体验算是最本质的要求。如果游戏中经常出现中断、崩溃或者画面错乱的问题,对于玩家的体验感损失非常大。
另外,从游戏开发的角度来看。通常引擎的开发者与游戏制作者不是同一人,游戏制作者并不熟悉引擎的编码。由于引擎大多进行封装,隐藏了内部的逻辑与调试信息,如果一个问题是由引擎内部产生的话,接下来的修补工作将是很难进行的。所以,稳定性是游戏引擎制作的首要标准。就算性能再强劲的引擎,如果问题重重的话,那也是无人问津的。
(2)性能是引擎好坏的关键。引擎性能一方面是指游戏运行时的流畅度,实际的技术参数就是指每秒屏幕的刷新率。另一方面,就是指引擎能够承载的运算量,比如是否可以进行复杂的物理模拟运算,能够支持多少个画面层次。它通常用来衡量一个引擎的好坏。这就好比汽车引擎的功率,游戏配备了性能强劲的引擎,就能够表现给玩家更多、更丰富的内容。如果把引擎比作心脏的话,一款好的游戏必须要拥有强劲、节奏均匀的心跳。性能好坏,通常是开发者选用引擎的标准。
(3)好的引擎就要有丰富完善的功能。随着玩家对游戏的需求和硬件设备性能的日渐提高,现在的游戏引擎不再是一个简单的渲染引擎。它需要涵盖许多丰富的功能,比如二维图形绘制、三维图形绘制、多声道处理能力、人工智能、物理碰撞、文件存取、社区分享、UI界面、动画视频等。丰富的功能为开发者提供了更多的选择,更能发挥游戏制作者的创造力。游戏引擎就像是一把多用途的瑞士军刀,或者是机器猫的口袋,开发者有了它能够应对各种各样的问题,满足玩家千奇百怪的口味。
(4)简单易用才是引擎发展的王道。引擎是被用来制作游戏的工具,那么必然要易于使用。钻木取火是非常麻烦的一件事,但是有了打火机后只需要轻轻一按,就能获得光明和温暖了。引擎也要发挥同样的作用。因为开发者使用引擎时,也要编写部分的代码,所以那些具备了简洁高效的程序接口、完善的技术支持文档的引擎将会更讨人青睐。
引擎要具备丰富的功能,同时还要简单易用。这算是所有消费者的心理需求。现代科技就是把一些复杂的事情简单化,游戏引擎也是如此。就好比按一下开关,洗衣机就会自动进水、洗涤、甩干等。对开发者来说,也许只需一行简单的命令,就可以让游戏中的人物完成跳跃、奔跑、站立的动作。引擎会把复杂的图像算法、物理模拟等功能封装在模块内部,对外提供的则是简洁高效的程序接口。这样有助于游戏开发人员迅速上手,这一点就如各种编程语言一样,越高级的语言功能越丰富,越容易使用。
另外,引擎也会为非编程人员提供可视化的编辑器或者第三方插件。实际开发过程中,只依靠引擎制作游戏是不够的,制作人员还需要各类工具来提高开发速度。所以引擎需要具备可视化编辑器,包括场景编辑、模型编辑、动画编辑、精灵编辑等。编辑器提供了所见即所得方式,不仅会加快制作的速度,也能保证游戏的品质,减少开发人员的错误。这些编辑器或者工具,不仅仅是为编程人员准备的,而是所有游戏参与人员都有可能使用它们。
说明:有些引擎本身就是一个集所有功能于一身的编辑器。
第三方插件则是另一种形式。它们通常是一些软件的辅助工具。例如游戏开发中美术人员经常会用到的第三方软件 3DS Max、Maya、Photoshop 等等绘图工具。引擎中提供了与其对接的插件。在第三方插件中,美术人员所制作的游戏资源,不再需要其他工具的辅助,直接可将资源转换为引擎需要的格式。当美术人员用编辑器调整人物动画时,可发挥的余地就更大,做出的效果也越多。这样就节省了开发人员的学习成本。
(5)跨平台特性是引擎的趋势。随着越来越多的电子设备融入人们的生活,为了给用户更加全面的体验,游戏引擎跨平台特性也逐渐被开发者重视。引擎能够帮助开发者实现游戏产品跨越不同平台带来的差异。开发者只需编写一套代码,就可以在多个平台运行。这无疑会节省游戏开发的成本,缩短周期。另外,更多平台支持,就意味着更多用户选择,也会为开发者带来更多的收益。
经过上面的介绍,读者对引擎的好坏也有评判的标准了。不过,世界上没有完美的事物,所以也没有最好的游戏引擎。对于开发者来说,需要做的是选择一款最适合的引擎。接下来,为读者介绍一些知名的引擎。虽然本书的主题已经确认,将会以Cocos2D-X引擎为主,不过,可以扩宽知识内容,有对比的学习,也未尝不是一件好事。
1.1.3 知名的引擎介绍
从第一款引擎的出现到现在已经过去了二十多年。这期间出现很多值得称赞的引擎。这些引擎各具特色。开发者使用它们也制作了许多为玩家所喜爱的经典游戏。限于篇幅,很难逐个地为读者详细的介绍。但是读者也不能作为井底之蛙,只看到眼前一个游戏引擎,毕竟Cocos2D-X引擎与那些老牌游戏引擎比起来,只能算是新起之秀。单就游戏技术而言,移动平台依旧是在追随其他游戏平台已经实现的内容。
说明:最领先的游戏技术大多应用在个人电脑以及家用机平台。
从游戏发展的历史来看,移动平台的游戏产品在全球游戏产业中只能算是冰山一角。但是,它作为新型平台,蕴涵爆发的能量,其快速扩张的程度已经占据了一定的市场份额。几乎所有的知名游戏引擎厂商都十分注重甚至已经进入了移动游戏市场。短短几年的发展,iOS 设备全球扩张的速度,足以威胁到了原本的游戏产业。我们都知道iOS设备推出之初,并不是为游戏打造的。但是根据AppStore的数据显示,人们最热衷的依然是游戏类的产品。据欧美国家统计,今年的圣诞节孩子们最希望的礼物,已经从家用游戏机转到iPad了。
表 1-1 列出了一些知名的游戏引擎。它们是众多游戏引擎中的一部分。按照粗略的估算,在游戏产业中至少存在上百款游戏引擎。正是这些引擎推动了今天游戏产业的繁荣。大体上游戏引擎可以看作两类:2D和3D。这只是根据其产出的游戏产品来划分的。按照比例来看,3D游戏引擎占据了主流地位。这主要是因为3D技术的复杂度,导致一般开发者很难独立制作,所以会借助成熟的游戏引擎。而2D引擎因为技术比较成熟、容易实现、制作周期短,所以行业内的成熟产品不多。很多的2D引擎是开发团队或者公司内部使用的。
表1-1 知名游戏引擎
注意:有些2D引擎也是使用3D技术来渲染画面的,大部分的3D引擎都可以用来制作2D游戏。
在表1-1中,引擎按照类型来区分,大致可以分为三类:授权、开源和自主。这三类涵盖了市场上所有引擎的种类。不同的开发者将会有各自选择的类型。下面就按照分类,依次为读者介绍每种引擎的特点。
1.1.4 引擎的分类
授权类的引擎,是指具备深厚技术实力的引擎厂商开发,通过授权的方式出售给游戏制造商的引擎。授权类的引擎主要以3D的类型为主。比如虚幻、Unity3D、Torque、CryEngine等都是非常不错的授权3D引擎。这些引擎原本都是针对个人电脑以及家用游戏机平台的,随着移动平台的全球火爆,一些引擎也纷纷推出的移动平台的版本。因为移动平台的游戏规模小,所以其价格也相对优惠。例如虚幻引擎(UDK)针对开发者前期免费使用,只有在游戏产品售出超过一定规模后才需支付费用。Unity3D 引擎的 iOS 平台版本只是销售1500美元而已。
3D引擎的制作难度以及开发周期都要远远高于2D引擎,所以对于一般开发者来说直接购买成熟引擎要比自主开发更适合一些。授权引擎中几乎包含了游戏开发的所需全部内容:渲染、编辑工具、物理体系、人工智能、网络通讯等。引擎框架严密而稳定,功能丰富易用,相关的配套工具以及技术文档也十分全面。毕竟开发者支付了费用,所以能够享受到周全的服务。况且,使用授权引擎能够降低开发失败的风险,因为大多数的授权引擎,已经被用来开发了很多游戏产品。
注意:在购买授权引擎时,需要明确购买的内容。很多的授权引擎是按照开发者购买的内容来计算价格的。
虽然授权引擎提供了完善而丰富的游戏功能,但是因为其需要支付一定的费用,所以对于资金有限的开发者来说还是不太合适。除了需要支付费用之外,授权引擎还有下面三点不足。
(1)授权的引擎中的源代码和工具通常是不开放的。当开发者遇到一些致命问题时,自己是很难解决的。唯一可行的办法,就是依靠引擎提供方的技术支持。这可是一项耗时耗力的沟通工作啊!尤其是对于国内的开发者来说,除了语言上的交流困难之外,还会因为距离、时差等因素导致沟通周期很长。
(2)由于引擎提供的功能是早已定制好的,虽然可以扩展相关的模块,但也是在限定范围内,如果开发者需要为自己的游戏加入新的特有功能,这也将会是一件难事。同时,游戏引擎的最新版本是掌握在厂商手中的,开发者很难及时地将一些新的技术应用在游戏项目之中。
(3)最后,由于引擎并不属于游戏制作商,导致游戏产品本身缺乏核心的价值。再加上,同一商业引擎可能已经被应用到许多的游戏当中。这就导致游戏之间同质化的现象是十分明显的。游戏的特色就不能依靠引擎来体现。
总之,如果开发者没有时间以及能力开发一个新的引擎,就不要介意购买第三方的引擎!读者需要明确,购买一个商业引擎并不意味着在游戏制作的过程中不再需要技术人员了。虽然引擎完成了许多的编码工作,但是游戏中的逻辑或者规则,还是需要编写代码。编码可能是某种脚本语言,也可能是某种编程语言。授权引擎适合那些想要一个成功的、现成的解决方案的开发者。这样的话,他们就能够把精力集中在游戏可玩性和创造内容上。授权引擎几乎用最优化的方法解决了游戏开发中的技术问题。它可以快速帮助开发者完成游戏产品。
注意:每一款商业引擎都存在局限性,可能是游戏类型的限制,也可能是游戏平台的限制,开发者在购买之前需要仔细考虑。
自主研发类的引擎通常是一些游戏制作公司出于制作游戏的需求而开发的引擎。其实授权引擎的前身大都是自主研发类的引擎。引擎制作商最初的引擎都是用来制作自己发行的游戏,在游戏产生良好市场效益并获得了开发者和玩家认可后,才转为商业引擎的。这些引擎多半是因为一款成功游戏而被人们所熟知。自主研发引擎是最传统的游戏开发方式,也是使用最为广泛的。比如id Soft 知名的Doom引擎,就是用来制作Doom游戏的引擎,在技术成熟和产品成功后,就成为了授权的商业引擎。
说明:Doom引擎现在已经是免费的引擎,曾用于《Doom》和《DoomII》。Doom3引擎还在销售中。
自主研发引擎的方式,适合具备游戏开发经验,有一定技术实力的开发者团队或者公司。自主研发引擎需要时间、人力和资金投入,这对于一些独立游戏开发团队是一笔不小的前期开支。不过,自主研发引擎获得成功,这将是一个游戏团队最核心的价值。游戏开发者可以按照自己的意图去构建引擎来制作游戏。引擎相关的制作工具,也可按照开发团队的工作流程以及人员配备来制作。自主研发的方式可以让开发者充分发挥自由,量身定做属于自己的游戏引擎,不仅在技术具有自主的产权,也可以打造出独具特色的游戏,令他人无法模仿。
自主研发的方式,意味着游戏制作要从最基础的地方开始。这是一个从“无”到“有”的制作过程。毫无疑问,自主研发的方式是游戏开发周期最长的,失败的风险也是最大的。作为自主研发引擎的开发者,需要有足够的耐心和不屈的毅力才能坚持到最后环节。只有将游戏产品推向市场,获得玩家的认可才有可能看到回报。所以如果开发者选择这样的方式时,就要有足够的信心和毅力,做好准备,因为在漫长的游戏开发阶段是没有利益回报的,期待一举成名的美好夙愿是行不通的。
注意:开发者不妨选择逐步去完善游戏引擎,先推出初期版本而不是一气呵成地去打造完美无缺的引擎。
开源引擎是通过将引擎的源代码在网络分享,以不谋取任何商业利益为基础,以公开发布的方式免费提供给开发者。开源引擎大多数是一些游戏爱好者将源代码在网络中分享。开源引擎最大的好处,就是可以让全球各地的同好者参与其中。人人都可以贡献自己的代码、可以协助测试引擎、可以书写样例教程。这也是开发者们喜闻乐见的一种方式。
开源引擎最重要的一点,就是分享精神。这就好比人类文明,是由几千年来的人们共同创造而来一样。这些开源引擎被暴露在大庭广众之下,人人都可以提出修改意见。在哲学上,有句名言“真理总是越辩越明。”很适合用来描述开源的游戏引擎。所以那些存在越为长久、被人们关注越多的游戏引擎,其完整程度更高。
游戏制作者可以免费使用开源引擎来制作游戏出售获取利益。开源引擎的存在为很多资金有限的独立或者小型的游戏制作团队提供了便利。市场上也不乏一些使用开源引擎制作的优秀游戏。
说明:有些游戏引擎可能会经历三个阶段,从自主研发到收费授权到免费开源,比如 Quake 引擎和虚幻I引擎。这些开源的商业引擎,绝对是开发者初期学习的典范。
开源引擎非常适合快速开发的游戏产品,尤其是产品短小精干的移动平台为开源引擎提供了施展身手的舞台。据笔者所知,一些业界知名的游戏厂商,在移动平台也会使用开源引擎来制作游戏产品,比如Gameloft、glu、EA等等。开源引擎是基于自主研发和授权引擎之间的一种方式。首先,开源引擎免费开放了源代码和工具并提供了相关的技术文档,开发者完全自由地对其进行二次开发,来打造一款属于自己的游戏引擎。然后,开源引擎的存在缩短了开发周期,开发者不需要从零开始来制作游戏。这些都是开源引擎为开发者带来的便利之处。
而相反的一面,由于开源引擎是网络分享的,是许多人共同协作贡献代码产生出来的。这些人可能来自全球各地,使用不同的语言,具备高低不一的技术水平。这样的制作方式使引擎在性能和稳定性方面没有保障。在互联网上存在着许多开源引擎,质量也是良莠不齐的。开发者应尽量选择获得多数人认可的、更新频繁的、历史悠久的开源引擎。
说明:选择更多开发者使用的开源引擎,意味着将会获取更多经验和案例。
同时,使用开源引擎的开发者,需要具备一定水平的技术实力来解决问题。开源引擎贫乏的技术支持,也是其缺点之一。它并没有完善详细的技术文档和范例,也没有制作人员来帮你解决问题。开源引擎的产生大多是出于制作者本身的兴趣和技术分享的精神来完成的。由于制作者时间和精力上受限,所以多数的开源引擎并不存在配套工具。
不过有一点是值得肯定的,那就是开源引擎在游戏技术的推广上起到了极大的作用。任何开发者在开始制作游戏之前都参考其源代码,从它们之中学习技术,汲取经验。开源引擎大多遵从某一个开源许可证。符合开源软件定义的许可证有 GNU GPL、BSD、X Consortiun 和 Artistic 等,它们之间存在一些细微的差异。
说明:在使用开源游戏引擎之前,最好仔细地阅读一下协议声明。并不是所有的开源引擎都可以用来获利的。
无论如何,开源引擎的形式导致开发者投入时间较少。开源引擎与授权引擎之间,总是存在一道无法逾越的鸿沟。在功能、工具以及易用性上,开源引擎有所欠缺。不过其免费开源的形式,受到开发者的喜爱。而且随着技术成熟和协作开发,很多开源引擎也具备了丰富完善的功能以及详尽周全的文档。正如本书介绍的Cocos2D-X引擎,它甚至已经超越了授权引擎的水准,却仍然采用免费开源的形式分享给开发者。
1.2 Cocos2D-X引擎的来历
Cocos2D-X游戏引擎并不是最初的版本。从名字读者就能看出最早的版本其实为Cocos2D引擎版本。追溯起来,Cocos2D 引擎已经有5 年的历史了。在2008 年3 月,Ricardo Quesada 发布了Cocos2D 引擎的第一个版本。最初的引擎版本定位于平面游戏框架,使用的开发语言为Python语言。在发布之初,只有235份的下载量。之后的两年间,Cocos2D引擎的受众群体依然很少,很少有游戏开发者知道。
说明:Cocos2D的名字是来自于引擎原创团队所在的阿根廷Córdoba市附近的Los Cocos。
2008年,苹果公司在乔布斯先生的带领下进军手机移动市场。这不仅改变了手机移动市场的格局,也为移动游戏产品带来了新的平台。引擎开发团队抓住了此次机会,在2008年6月宣布将会接入iPhone手持平台,并在当月就公布了以 Objective-C 为基础的 Cocos2D for iPhone 0.1 引擎版本。此版本延续了Python版引擎的框架和设计思路。随着iOS设备市场占有率不断上升,iPhone游戏产品也成为了用户最爱的应用。截止到 2008 年 12 月,苹果网上商店(App Store)上已有超过 40 个用 Cocos2D 引擎开发的游戏。
到2010年的9月份,Cocos2D引擎已经在游戏开发者中流行。许多的开发者第一次接触Cocos2D引擎,就是来自其iPhone平台的版本。此版本不仅是Cocos2D引擎当中的明星产品,它也是App Store最为成功的引擎。由于 iPhone 版本完善而成熟的功能,使得它在开发者中广泛传播并使用。随后《StickWars》成为第一款在美国区付费榜夺得冠军的Cocos2D游戏,这宣告了Cocos2D引擎的时代已经到来。与此同时,英国的设计大师Michael Heald 为Cocos2D 引擎设计了新的标志,替换了之前“奔跑的椰子”,如图1-2所示。
图1-2 Cocos2D引擎标志
图1-2左边的是Cocos2D引擎版本,它是基于Objective-C语言的版本。右边的就是本书将介绍的 Cocos2D-X 引擎。在iPhone版本发布之前,Cocos2D引擎只被少数开发者用来制作个人电脑平台上的游戏。游戏产品大多以Flash开发类型的居多。因为在个人电脑平台上,存在着许多优秀的游戏引擎,再加上 Python 语言比较小众,所以Cocos2D 引擎并没有大放异彩的机会。直到现在也是如此,在个人电脑平台上,它并不是开发者热衷的游戏引擎。
但是因为 iPhone 版本的出现,凭借着用户对 iPhone 设备的热衷,Cocos2D-iPhone 版本,也变成开发者的首选。换句话说,iPhone版本的诞生是引擎发展的重要时刻。它成为了引擎体系中第一个明星。随后不久,另一个更加耀眼的明星诞生了。那就是更具历史意义的Cocos2D-X版本。Cocos2D-X引擎版本开启了跨平台开发的时代。“X”意味着Cross,表示交叉的意思。-X引擎版本为开发者提供了跨平台的支持。开发者只需使用 C++语言编写一次游戏逻辑,就可以在 Android、iOS 以及其他移动平台运行。
说明:值得骄傲的是Cocos2D-X引擎版本是由国内开发者王哲(walzer)以及团队制作的。
Cocos2D-X版本之后,引擎发展进入了鼎盛时期。同一时期,美国人用C#改写成CocosNet,新西兰人Ryan Williams 用 JavaScript 改写了 HTML5 的版本,中国人则用 C++改写了 Cocos2D-X 版本。正如图 1-3所示的,在全球开发者的贡献下,Cocos2D引擎衍生出了很多的版本。
图1-3 Cocos2D引擎各个版本发展
开发者社区也涌现出丰富的工具和编辑器,其中有Texture Packer、Glyph Designer 等单一工具,也有CocoShop、CocosBuilder、Sprite Helper/Level Helper 等集成式的编辑器。开发者社区还提供了大量的书籍教程、示例代码、视频培训等供开发者学习和使用。如今Cocos2D引擎各个版本还都在不断地发展和更新中。Cocos2D引擎的原始团队也受雇于Zynga公司。Cocos2D-X引擎团队也受到了来自微软和谷歌的赞助。
说明:谷歌赞助了HTML5版本,微软赞助了XNA版本。
目前Cocos2D引擎已经更加完善、稳定和易用,同时,拥有众多非常优秀的编辑器。各个平台的应用商店,已经拥有大量基于引擎开发的游戏。毫不夸张地说,Cocos2D 绝对是移动平台领域应用最广、使用最多的游戏引擎。相信读完本书,读者也将成为众多优秀的Cocos2D-X引擎开发者中的一员。那么接下来,让我们来慢慢地体会它的强大吧!
1.3 引擎的版本
Cocos2D-iPhone游戏引擎,自2008年6月发布了第一版本0.1至今已经度过了4年。4年的时间正好是一届奥运会的间隔。虽然Cocos2D引擎没有与其他的引擎竞赛,但其版本更新的速度毫不逊色。能保持如此频率的更新升级,除了来自开发者辛勤的工作之外,还得益于人们对于此款游戏引擎的喜爱。正是因为有了众多开发者的关注,才促使它成长到今天的地步。
在4年的时间里,Cocos2D引擎至少推出了10个主要版本。每个版本都存在一些变化:修正了一些存在的问题,加入了新的功能等。这其中有一些重要的版本变化。0.90 版本算是一次重大升级,采用了全新的类名体系。这也标志着这个平台变得越来越成熟,越来越好用。从 0.99.0 版本开始,Cocos2D 引擎凭借丰富的功能以及简单易用的程序接口,成为了开发者的首选。Cocos2D引擎就登上了iOS平台游戏引擎的王座,进入了鼎盛时代。
说明:截至2012年12月12日,Cocos2D引擎最新的稳定版本为2.0。
Cocos2D版本是引擎发展的主旋律,Cocos2D-X版本也是按照其节奏来推陈出新的。以版本号来区分,引擎可以分为两个分支:以1 开始标号的是支持OpenGL ES 1.x 的,由于年代久远已经不再维护了;以2开始标号的是支持OpenGLES 2.0 之后版本的。Cocos2D-X 最新的稳定版本为2.0。只有一些专属平台还存在0.X 以及1.X 的引擎版本。比如Windows Phone8 平台的0.13 版本以及应用HTML5 的0.5.0 版本。
说明:OpenGLES 为引擎所用的3D渲染库,它是实现跨平台的核心技术。
因为Cocos2D-X引擎采用了C++语言编写,所以可以同时支持多个手持设备平台。它成为了开发者进行移动游戏产品跨平台开发的首选。另外,Cocos2D-X 引擎也为使用 C++语言的开发者找到了一条进入Android 和iOS 以及Windows Phone平台开发的捷径。
1.4 下载与安装
Cocos2D-X引擎的最新版本,读者可以从官方网站来下载。这是完全免费的,地址如下。
//Cocos2D社区
http://www.cocos2d-iphone.org/
//Cocos2D-X社区
http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download
图1-4所示正是Cocos2D-X的官方网站。在网站的页面中标签依次为新闻、路线图、任务、维基、下载、文档、讨论区、扩展和游戏。这些都是与Cocos2D-X引擎相关的内容。在新闻页面中,将会发布最新的引擎动向、技术变化以及版本更新,还有一些业内的新闻。偶尔,也会有一些开发者日常生活中的琐事。按照网站上页面的划分,从左至右依次介绍如下。
图1-4 Cocos2D官方网站
(1)路线图页面展示了Cocos2D-X引擎版本的变化。对于开发者来说最主要的就是各个引擎下一个版本的发布时间。页面中还展示了引擎开发者修复Bug的时间。
(2)任务页面主要是给引擎开发者使用的。里面表明了与引擎相关的各项任务。每个任务包含了引擎版本、主题内容、当前状态、开发时间、指派人员和涉及平台。读者可以通过此页面来了解引擎开发人员是如何工作的,清楚地知道开源引擎所进行的工作有哪些。
(3)维基页面算是对开发者最有帮助的内容了。这里有关于Cocos2D-X引擎的基本介,还有基础的教程、示例程序以及演示Demo。不过这些内容大多是英文的。其中有一个编程语言与目标平台的对应表。还有三个版本下载的链接,C++、JavaScript、LUA三种语言的开发文档以及代码贡献方式。
(4)下载页面就无需多说了吧!在此页面内包含了Cocos2D-X引擎各个版本的下载地址。其中还包括了HTML5以及XNA版本。不过此页面内只有最新的引擎版本,之前的版本只能通过代码库来获取。还有一些游戏示例项目,提供给了开发者借鉴学习。
(5)文档页面就是提供了Cocos2D-X引擎版本以及Cocos2D-HTML5引擎版本的API文档。开发者可以在线查询引擎中每一个类以及函数的定义和用法。
(6)讨论区页面是世界各地开发者讨论的中心。我们在这里交流、沟通、分享。讨论区可以帮助读者解决技术难题,可以发现与引擎配套的工具,可以看到别人的作品,可以找技术高手请教,可以向别人传授经验。总之在论坛中,开发者讨论一切与引擎有关的内容。
(7)扩展页面则是介绍Cocos2D-X引擎配套的工具、编辑器或者开发库。
(8)游戏界面则是展示的那些使用了Cocos2D-X引擎制作并且上线销售的游戏。这些游戏是由其开发者上传的。下载页面则是提供给开发者下载各个版本的Cocos2D引擎。
Cocos2D-X官方网站是引擎一切信息的来源。它应该是读者经常登录的网站。虽然网站是以英文为主,但是读者也不用担心自己英文不好。在讨论区就有不少中文提问者,别忘了引擎的开发者中也有许多国内的同仁。社区网站是开源引擎重要的窗口。在这里可以获得引擎最新的消息;在这里可以结交志同道合的朋友;在这里可以解答疑惑,获得帮助;在这里可以分享自己的成就,看到别人的作品;在这里可以找到高效的工具;在这里可以找一些游戏产品的源码;在这里可以找到技术文档。所以要想成为一个引擎的使用高手,官方网站必将是读者频繁访问的地方。
说明:国内有一些中文的技术论坛,对读者来说也是不错的学习和交流之地。
在Cocos2D-X的官方网站的下载页面中,开发者就能看到最新的引擎版本。先不用着急下载引擎,找到适合的版本再说。引擎总在那里,不论下载与不下载,它就在那里,不离不去。所以读者首先是要明确选用哪个版本。Cocos2D-X 引擎不同版本,对于开发环境也有不同的要求。根据前面介绍的内容,本书将会选择使用稳定的2.0.4引擎版本。稳定版本是经过测试的可运行版本,这并不代表着其他版本存在多么严重的问题,而是稳定版在短时间内将不会升级更新。
考虑到本书主要以学习引擎技术为主,当然会以最新的稳定版作为主要内容。否则,在一本书还没有完成的情况,测试版就被更新了,岂不就是浪费资源。读者需要明白每一个版本都是经过了测试之后,才会变为稳定版本的。本书的目的不是制作一款新颖的游戏产品来吸引玩家,而是教会广大读者掌握游戏开发的能力。所以稳定的引擎版本与先进高效的技术之间,必然会选择前者。另外,测试版本可能会有一些不完善的地方和未经测试的功能,这并不适合用来教授开发技术。
注意:那些尚在开发中的测试版本,可能会有一些暂时未确定的方法接口或者部分新添加的功能。
Cocos2D-X 是一款跨平台的游戏引擎。这意味着开发者需要在不同平台的开发环境中编写游戏。所以如果读者想要开发iOS 和 Android 以及其他平台,请先准备好开发环境以及设备,然后再继续后面的内容吧!在本书的讲解中,将会以Windows下的VisualStudio2010 为主要的开发环境,因为它涵盖了大多数的移动平台。它能够完成游戏主要内容的制作。如果开发者想要制作 iOS 系统的游戏,则需要准备一台苹果电脑了。
说明:通常开发者会在个人电脑上开发一个游戏的主版本,然后再适用到不同平台。
跨平台开发除了需要不同的设备和开发环境之外,对于开发者还将会需要掌握不同的编程语言。这也是Cocos2D-X引擎对于新手来说的一个入门槛。表1-2列出了Cocos2D-X支持的平台以及其所用的编程语言。在表中对各个平台表明了三个状态。“o”表示已经完全支持的平台,在主版本的引擎中就能实现开发;“i”表示只能够使用独立引擎版本支持;“w”表示开发者正在制作中,未来将要支持的内容。从表 1-1 中能够看到,Cocos2D-X 引擎不仅仅只是支持了移动平台,对于桌面平台以及网页平台也是有所涉及的。
表1-2 Cocos2D-X支持平台以及编程语言
说明:对于编程语言的掌握,读者并不需要都会。不过,因为引擎主版本是以 C/C++编写的,所以读者最好具备一些此方面的编程经验。至于其他语言,则可根据爱好选择学习。
按照之前的约定,点击下载稳定版本。为了和本书内容一致,请读者下载cocos2d-2.0-x-2.0.4 @ Nov022012的版本。之后的内容将会使用此版本的引擎进行讲解。当下载完成后,就会得到一个压缩包。进入解压后的目录,读者就能看到如图1-5所示的内容。这将是与Cocos2D-X引擎的初次见面。图1-5中包含了引擎的源代码、授权文件、示例程序、第三方程序库以及各种工具。
图1-5 Cocos2D-X引擎的内容
图 1-5 所示的内容就是下载引擎包中所有文件以及目录。在此目录当中,读者会看到许多的文件与子目录,是不是会感觉内容多得有点应接不暇?不用着急,这只是第一印象。哪有人只通过一面之缘,就能摸清对方底细的。稍后读者将会通过整本书的内容来认识它!在licenses目录中,有多个引擎版本说明的文件,其中包括了Cocos2D-X引擎以及其使用的第三方开发包的版权声明。如果读者不想研究法律,就不必查看了。其他的文件则是制作者介绍、版本说明、更新说明以及发布介绍。这些内容与制作游戏并没有太多的联系,直接跳过吧!
引擎包已经提供了工程项目的开发文件。图1-5所示中间的一列最后三个就是用来应对不同VS版本的工程项目文件。为了方便引擎的使用者,包中提供了很多方便快捷建立项目的方式。针对不同的平台,开发者要创建不同的项目。对于开发工具的选用,作为Windows、iOS以及Android三大主要平台,读者至少需要安装VisualStudio、XCode以及Eclipse。本书后续的内容介绍会基于VS2010、XCode4.5以及Eclipse3.5的版本。
注意:读者最好不要选用VS 2008 版本进行开发,因为引擎开发者已经明确未来将不再支持此版本的开发环境。
除了基于Windows平台开发之外,引擎也为其他平台的开发者提供了便利的工程建立方式。在Mac或者Linux平台的开发者,可以通过批处理或者Shell脚本来建立项目。这些文件就在引擎根目录当中。针对不同的开发工具,引擎还提供了对应的项目模板以及技术文档。在Mac电脑中的XCode环境下,读者就可以安装Cocos2D-X的项目模板以及文档。至于具体的步骤,将会在下个章节进行介绍。
1.5 引擎的组成
作为知名的2D游戏引擎,Cocos2D-X具备的功能算得上达到应有尽有、无所不能的程度了。在引擎中甚至都提供了一些3D功能。按照模块以及功能来看,引擎中包含了画面渲染、碰撞检测、音乐音效、操作响应、内存控制、粒子效果、文件读写、UI界面等一系列的功能。这些内容,将在本书后续的章节中逐个进行详尽的介绍。其实读者只要看看本书各个章节的目录,就会知道Cocos2D-X引擎为开发者提供了哪些丰富的功能。
说明:因为Cocos2D-X引擎发展从未停滞不前,所以读者看到本书时,它一定会有一些新的功能或者工具出现。
Cocos2D-X 引擎为开发者提供了开发游戏的基础内容。游戏开发者可以在引擎中找到与游戏制作相关的所有内容。除此之外,它还支持许多第三方的工具或者程序库,比如物理模拟库、动画工具、地图编辑器以及粒子编辑器。这些工具与程序库,能够帮助开发者更快更高效地完成游戏制作的过程。因为Cocos2D-X 引擎已经拥有了广大使用群体,其中包括Zynga、Namco、GLU等国际知名游戏公司,所以越来越多的开发者分享与之配套的工具。下面简单地为读者列举一些Cocos2D-X引擎中的功能。这算是作为前期的铺垫,在后续的章节读者将会详细地熟悉它们。
场景管理:采用种子树的方式来管理画面。使用流水线的方式来绘制游戏界面。
场景切换:提供了丰富的场景切换效果,比如滚轴、翻页、淡进淡出。
精灵以及精灵列表:精灵是游戏内容的基本元素,它被用来表现游戏中的各个物体。
特殊效果:画面的透明、波纹、波动、液态效果等。
动作功能:引擎中的精灵具备丰富的动作或者行为。比如移动、旋转、伸缩等。
UI界面:引擎中提供了一些简单的菜单以及按钮组件。
支持物理功能:引擎外接了两款物理引擎,Box2D与Chipmunk。
粒子系统:用于游戏中的火焰、雪花、爆炸等特殊效果。
字体功能:快速的可编辑字体绘制功能,支持TTF标准字体。
支持纹理集合:引擎支持将多张纹理整合为一张纹理的功能。此功能用于节省内存,提供绘制速度。
地图背景功能:支持三种地图图块拼接方式矩形、菱形以及正六边形。
绘制到纹理:这是一个三维渲染技术,类似二维平面中的绘制缓冲区技术。
用户交互:引擎可以响应iOS设备中的触碰以及加速度计,和Mac平台的触碰、鼠标以及键盘。
跨平台功能:隐藏各个平台的差异,为开发者提供统一、完整的功能。
声音模块:提供了丰富的声音播放功能,支持多种音频格式。
支持脚本开发:引擎中提供了对Lua以及JavaScript脚本编写的支持。
上述的条目只是列出了大部分Cocos2D-X引擎中的功能。如果读者是第一次接触游戏引擎的话,看到如此多的功能,难免会感觉到学习的压力。大可不必有如此的担心。因为Cocos2D-X引擎设计之初,就是为了让更多的新人进入游戏开发领域,所以它一直秉承着简单易用的观念。上述列举的功能中,有些内容甚至于只需编写一句代码就可以实现。再加上本书中使用了很多示例项目作为介绍,读者将会非常轻松地成为Cocos2D-X引擎的开发高手。
Cocos2D-X 引擎中大部分的源代码是基于C/C++编写完成的,所以开发者也主要使用C/C++编程语言来完成。不过,由于引擎提供了脚本支持,开发者也可以选择使用Lua或者JavaScript。Cocos2d-X引擎已经足够成熟,足够稳定。引擎不仅拥有众多的开发者,而且在各个平台都已存在许多游戏产品。Cocos2D-X引擎能够成为2D引擎中的佼佼者,获得玩家和开发者的热衷,完全是因为其强劲而完善的功能。Cocos2D-X具备了优秀引擎的品质:功能完善、性能强劲、多平台支持、丰富的工具、简单易用。
说明:由于跨平台的特性,在引擎中还存在基于Objective-C和Java的源代码。
虽然Cocos2D-X 引擎总是被用来制作二维游戏,但是其底层的渲染库选用的是OpenGL ES 2.x。究其原因,无非想要通过硬件设备来提高引擎的渲染能力。以个人电脑为例,如果只是进行简单的平面图形绘制,那么通过CPU的运算就可以快速实现。但是面对色彩纷呈的游戏画面,CPU的运算就不够用了。对于那些复杂、大型的游戏,玩家就需要通过显卡来提升性能了。对于移动设备也是如此。此时就是OpenGLES渲染库登场的时候,OpenGLES 是专门为移动设备打造的3D渲染器,它已经成为硬件领域的技术标准。
Cocos2D-X 引擎选用OpenGLES 作为渲染底层,出于两个明显的原因。
(1)因为OpenGL ES 已经成为各个平台系统的标准支持,所以选用它可以从根本上解决引擎跨平台的问题。
(2)OpenGLES 渲染库能够获得来自设备显卡的支持。这是一种对游戏渲染性能最佳的提升方式。
基于上述两点原因,OpenGL ES 就成为了引擎开发者最佳的选择。虽然引擎的渲染库是基于三维空间的,读者也不用担心缺乏对三维空间技术的理解。因为Cocos2D-X引擎已经为开发者降低了技术复杂度,对于开发者来说几乎完全感觉不到任何 3D 方面的内容。开发者不需要知道画面效果是怎样用 OpenGL ES代码来实现的。
相比来说,二维游戏更容易开发,也更容易让人理解。而且多数情况下,2D游戏产品对设备硬件的要求更小。开发者能创建更生动和拥有更多细节的画面。开发者哪怕对OpenGLES 的技术一点不知,也仍然能够运用Cocos2D-X引擎制作出优秀游戏。现实情况也是如此,笔者曾经问过一些开发者,他们也并不懂得任何三维空间的技术,却也做出了让人称赞的游戏。这就好像我们所使用的手机。很多人并不知道它是通过怎样的技术来接听电话或者发送信号的,但依旧是人手一台,聊得不亦乐乎。
说明:如果读者要想成为游戏制作技术的高手,那么OpenGLES 开发是必须掌握的技能之一。
1.6 技术文档
前面的章节内容,曾介绍了两个包含引擎的技术文档的地方,细心的读者一定会留有印象。在引擎的官方网站,提供了在线版本的API指南。以防读者忘记了,下面列出的网址就是访问路径。
http://www.cocos2d-x.org/reference/native-cpp/index.html
在引擎的下载包中也提供了技术文档。不过,技术文档的内容其实包含在代码中,读者需要一个工具才能生成网页版本。这个工具就是Doxygen。它是一个C++、C、Java、Objective-C、Python、IDL(CORBA和Microsoft flavors)、Fortran、VHDL、PHP、C#和D语言的文档生成器。它可以运行在大多数类UNIX 系统,以及Mac OS X 操作系统和Microsoft Windows。它是一个编写软件参考文档的工具。因为此工具是从源文件提取注解来生成文档,所以开发者需要将注解直接写在代码中。这种方式可以很好地保持与源代码的同步。
下面以Windows操作系统为例,讲解技术文档生成的方法。读者需要从网络下载Doxygen应用软件。读者不要搞错了平台版本,而且如果不想通过命令行来生成文档的话,记得下载包含GUI的版本。在其官方网站可以找到最新版本。网络地址如下所示。
http://www.doxygen.org/
安装的过程和其他电脑软件类似,直接点击下一步就可以了。然后运行软件,读者就会看到如图 1-6所示的画面。
图1-6 Doxygen 软件界面
在菜单界面中选择文件,然后打开引擎目录中cocos2d-2.0-x-2.0.4\document\doxygen.config文件。
此文件就是引擎中提供的技术文档生成文件。有了它,读者就可以省去配置的过程,直接点击“Run Doxygen”按钮,很快就能够获得网页版本的API指南了,在引擎document目录将会生成一堆文件。读者可以直接点击“Show HTML output”或者通过浏览器访问其中的index.html,就会看到如图1-7 所示的界面。
图1-7 Cocos2D-X技术文档
在技术文档中,开发者可以查到引擎中每一个类以及函数。这就是引擎使用指南宝典。不过,为了考虑国际化,技术文档是英文版本。正所谓“代码无国界”,对于开发者来说代码片段还是可以看懂的。在文档中,将引擎的功能按照模块划分方便查询。开发者也可以按照字母顺序或者直接搜索,来查询类以及函数。文档中还提供了基本的类和函数的解释。有一点读者需要明确,文档的所有内容都来自于源代码。所以在源代码中,我们也能够看到同样的内容,只不过技术文档更直观和系统一些。同时,在网页中展示的类的继承关系以及引擎组成更容易理解。
说明:生成的文档,可以在各个平台自由访问。
此技术文档将会成为读者经常需要查看的手册。在以后的游戏开发中,如果有关于引擎中类以及函数不清楚的地方,就可以来这里寻找答案了。此技术文档只能作为一个类和函数的指南,其中并没有讲解类和函数具体的用法,这也是本书存在的价值。如何正确、有效地使用引擎制作游戏,才是开发者的主要能力。
除此之外,在今后的开发中如果遇到了技术难题,这是指那些具体情况下出现的问题,读者可以选择在网站的讨论区寻求帮助。答案的一种可能是已经有人遇到了同样的问题并提供了解决方案。另一种可能是会有高手协助解决问题。如果有朝一日,读者也成为了一个有丰富经验的游戏开发者,去讨论区参与解决技术难题,也是颇有乐趣的一件事。对于英文不好的开发者,也可以去Cocos2D-X的中文社区,地址如下。
http://cn.cocos2d-x.org/
1.7 成功的游戏
按照官方的数据,市场上基于Cocos2D-X引擎开发的游戏已达三百多款。根据开源社区的保守统计,基于Cocos2D-X开发的游戏全球范围内已经突破一亿安装量。比如著名的捕鱼达人就是引擎应用成功的典范。国内知名的游戏厂商,网龙、空中网、Haypi、TinyCo、人人游戏、4399、热酷、五分钟等都在使用Cocos2D-X开发手机游戏。国外也有很多公司选用Cocos2D-X引擎制作二维游戏,比如GameLoft、Glu以及DisneyMobile。
现如今在厂商和开发者的支持下,一个全职的团队全力投入到维护和发展游戏引擎。这在开源软件领域也是很少见的情况。讨论社区也是堪比淘宝客服,七天二十四小时不打烊。引擎中所有的缺陷都被迅速发现并修复。Zynga、Intel、Google及众多大公司的工程师也全面投入了Cocos2D-X的代码贡献工作。拥有如此强劲生命力的引擎,任何一个游戏开发者都不应该错过。开发者就算不用它来制作游戏,也会称赞其对游戏产业的推动。
经过对Cocos2D引擎体系的介绍,我们知道它主要是针对移动平台的游戏引擎。现在移动平台市场被两大平台占据:Android 和iOS。虽然Windows Phone 8 被业界看好,但是它还需要时间才能占据一定的市场份额。由于主版本 Cocos 引擎就是针对 iOS 平台的,在苹果公司的网上商场(AppStore)中已经有超过三千多款游戏是由此版本制作的完成,如果加上Cocos2D-X引擎制作的游戏,那么Cocos2D引擎绝对是公认的iOS平台最佳引擎。Android市场种类较多,很难有汇总的数据,在此就不列举了。
说到使用引擎而获得成功的游戏,那真是数不胜数。其中不少游戏都曾是TOP10排名的常客,深受玩家喜爱。在官方网站上,列举了一部分游戏产品。这些产品大多是开发者主动申报的,还有一些隐姓埋名的游戏并不在统计当中。图1-8所示正是来自官网推荐的游戏列表中的截图。这些游戏大多都可以从网上商店下载。
图1-8 Cocos2D-X游戏引擎制作的游戏
有兴趣体验一下的读者,也可以登录App Store或者Google Play下载这些游戏。在开始使用Cocos2D-X引擎之前,先来体会一下游戏引擎的魅力吧!这样当我们在制作游戏时就能轻车熟路、得心应手了。
看看当中是否有读者认识的知名游戏?如果读者有一台智能手机的话,这个答案想必是肯定的。如果没有体验过的话,不妨下载一些免费的试玩版本,以此来体验一下Cocos2D-X引擎的游戏效果。这也算是为将来制作游戏做准备了。在知道了其他开发者的实现方法后,不妨思考一下当自己使用Cocos2D引擎制作游戏时,该如何利用引擎的功能来实现效果呢?就算没有正确答案,也无关紧要,因为读者马上就要开始熟悉Cocos2D-X引擎的使用技术了。
1.8 Cocos2D-X引擎的体系
在前面的介绍中,读者得知Cocos2D-X只是Cocos2D引擎的子版本,引擎的架构以及类都是与Cocos2D一致的。虽然Cocos2D-X只是引擎的子版本,但是它的风头早已盖过了Cocos2D。其最显著的特点就是跨平台的特性。在Cocos2D-X引擎发布之初,只是支持了仅有的几个移动平台。而现在的引擎版本支持了众多的系统平台,涉及了个人电脑、移动平台以及网络应用。正如图 1-9 所示,这些适配的平台,其中大多数是由引擎开发者完成的,也有一些是来自其他开发者的分享。总之,如今的Cocos2D-X引擎仍在不断完善,尽可能地支持更多的系统平台。
图1-9展示了Cocos2D-X引擎支持的平台,其中包含了一些主流的移动平台。而Cocos2D-X引擎跨平台特性,就是最大限度减少程序员重复开发的工作,以此来提高效率。引擎能够让开发者只需要编写一套代码,就可以在多个平台运行。
图1-9 Cocos2D-X支持的平台
Cocos2D-X引擎的第一个版本发布于2010年的11月。至今为止,已经发行了34个主要版本。如果以开发语言来区分的话,Cocos2D-X引擎主要为三个版本。如图1-10所示的C++、JavaScript以及C#语言版本。
图1-10 Cocos2D-X引擎的体系
Cocos2D-X 引擎体系以开发语言来划分,成为了三个版本:-X、HTML5、XNA。其中-X 的版本是使用者最多,也是产品最多的一个分支。它应对了大多数的平台。比如iOS、Android、黑莓、Bada、Windows、Linux、Mac,等等。它的主要开发语言就是C++。而HTML5是近期刚刚推出的版本,至今还没有成形的游戏产品。它完全是为未来技术趋势而准备的版本。XNA是早期为了支持微软移动设备而推出的版本。它需要使用微软独特的C#语言来开发。
说明:如今为了更好地实现跨平台,JavaScript脚本语言可以在各个引擎版本中用来开发游戏。
读者需要留意,三个分支基于的引擎版本也有所不同。XNA的版本由于已经不再更新了,只有少数的开发者在更改其中的错误。它是基于0.1.0的引擎版本。而HTML5则存在两个版本:0.5.0和2.1.0。-X作为主要分支,其版本更多一些。据说黑莓的版本,是由一个开发者经过四十八小时做出来的。不得不令人敬佩的开发者对游戏的热情啊!
1.9 Cocos2D-X引擎的版权声明
免费开源是Cocos2D-X引擎最迷人的地方,也是众多开发者选择它的主要原因。简单讲,开发者不用支付一分钱,就能用到几乎是世界上最好的游戏引擎。开发者可以用它制作游戏产品,就算将来游戏产品销售获得利润,也无需支付任何费用。俗话说天下没有免费的午餐,但这次却是例外。这正是开源的魅力所在,开源是互联网传播的产物。
说明:免费开源并不是没有版权,Cocos2D-X引擎属于其开发者社区。
开发者可以使用Cocos2D-X引擎来进行商业开发并获得收益,但是必须要包含其版权声明。开发者可以利用引擎在各个平台编写免费或收费的应用程序。这并不需要向引擎的提供者支付任何版税或者使用费用。毕竟也是用了别人的成果,让自己赚到了钱,如果实在过意不去,那么也可以为Cocos2D-X引擎的开发者捐赠一些费用。这能够帮助引擎团队维持项目运营。Cocos2D引擎基本上是由Ricardo Quesada一个人创造的产品,后来被Zynga收购,而Cocos2D-X引擎版本则是众多开发者参与完成的。
说明:在官网提供了捐赠的链接。不过自从被Zynga收购之后,引擎团队就不差钱了。
详细来说的话,Cocos2D-X引擎版本是针对多平台由C++程序语言编写的。使用了最宽松的MIT开源协议,MIT许可协议之名源自麻省理工学院(Massachusetts Institute of Technology,MIT),又称 “X 许可协议”(X License)或“X11 许可协议”(X11 License),赋予软件被授权人更大的权利与更少的限制。
图1-11列出了在引擎目录cocos2d-2.0-x-2.0.4\licenses下存放着的各种授权协议文件。读者可以通过文本的编辑器来查看文件内容。这里不仅放着Cocos2D以及Cocos2D-X引擎的授权文件,还有引擎中所用到的第三方库的授权文件。这些第三方库同样也是开源免费的,否则它们也不能够出现在引擎当中。
图1-11 引擎中的授权文件
为了国际通用,授权协议是以英文撰写。下面列出许可协议的中文解释。
被授权人权利
被授权人有权利使用、复制、修改、合并、出版发布、散布、再授权及贩售软件及软件的副本。被授权人可根据程序的需要修改许可协议为适当的内容。
被授权人义务
在软件和软件的所有副本中都必须包含版权声明和许可声明。
其他重要特性
此许可协议并非属 copyleft 的自由软件许可证条款,允许在自由及开放源代码软件或非自由软件(proprietary software)所使用。
MIT的内容可依照程序著作权者的需求更改内容。这正是MIT与BSD(The BSD license,3-clause BSD license)本质上的不同处。MIT许可协议可与其他许可协议并存。另外,MIT条款也是自由软件基金会(FSF)所认可的自由软件许可证条款,与GPL兼容。
开源的含义,就是开放源代码。一些人将开放源代码认为是一种哲学思想,另一些人则把它当成一种实用主义。开放源代码意味着制作者将其在互联网发布,来获得广泛使用。在发布之后,其他的开发者也有机会成为游戏引擎制作的参加者。地球上的任何人都可以提出对源代码的修改或者建议。
同时,应用程序的开发者也可以通过阅读Cocos2D-X引擎的源代码来进行学习,甚至可以在必要的时候去修改引擎中的代码,来添加想要的功能。这并不是每一款引擎都能做到的。多数授权引擎,并不会为开发者开放源码。当开发者使用授权引擎制作游戏时,总有一种雾里看花、不知真假的感觉。如果读者喜欢阅读代码,那么完全可以近距离接触Cocos2D-X引擎,对其内部结构搞得清清楚楚、明明白白。这也不是一件不可能的事情。
说明:读者完全可以放心地使用这个开源引擎,不用顾虑其可能存在的内在限制或者法律约定。
1.10 本章小结
作为本书开篇的第一章,为大家介绍了即将使用的Cocos2D-X引擎。阅读之后,读者应该对它的来龙去脉非常清楚了。虽然本章节并未涉及任何的技术内容,但是第一次接触Cocos2D-X引擎,开始的铺垫十分重要。笔者并不是随意选择了一款游戏引擎作为游戏技术的讲解核心。Cocos2D-X 引擎作为移动平台最佳的2D游戏引擎,有太多的理由,让我们选用它来制作游戏了。相信对于读者来说,最重要的一点就是免费开源了。
Cocos2D-X 是一款非常优秀的引擎,其中包含了丰富而完善的功能。因为引擎的简单易用,开发者通过短暂的学习,就能够利用它快速地制作游戏产品。引擎中提供了游戏制作过程中所需的方方面面内容。同时,引擎还提供了许多配套工具以及编辑器。有了它们,不仅会加速游戏开发时间,还能够减少错误。本书接下来的内容,将会为读者介绍引擎中每一个功能的用法以及实现方式。正是因为引擎开放了所有的源代码,我们才得以看到其中的细节。