Cocos2D-X游戏开发技术精解 (学习Cocos2D-X的权威指南)

内容简介:
Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块??渲染框架;如何实现动态画面和用户交互;二维游戏中背景的实现方法和技术;Box2D物理引擎;如何掌握声音引擎的用法;Cocos2D-X引擎的文件操作模块和内存管理机制;各种各样的粒子效果;如何掌握利用Lua脚本制作游戏的能力;Cocos2D-HTML5引擎版本;引擎的附加功能等。最后,《Cocos2D-X游戏开发技术精解》和读者一起展望了Cocos2D-X引擎的未来。
作为Cocos2D-X的权威指南,《Cocos2D-X游戏开发技术精解》得到了Cocos2D-X引擎开发者的建议以及指导。本书适合对Cocos2D-X感兴趣的以及有志于学习和从事移动平台游戏开发的读者阅读参考。
1123

目录
第1章 Cocos2D-X引擎的介绍
1.1 何为游戏引擎
1.1.1 游戏的核心?引擎
1.1.2 引擎的特点
1.1.3 知名的引擎介绍
1.1.4 引擎的分类
1.2 Cocos2D-X引擎的来历
1.3 引擎的版本
1.4 下载与安装
1.5 引擎的组成
1.6 技术文档
1.7 成功的游戏
1.8 Cocos2D-X引擎的体系
1.9 Cocos2D-X引擎的版权声明
1.10 本章小结
第2章 Cocos2D-X引擎的开发环境
2.1 跨平台的开发
2.2 建立开发环境
2.2.1 PC开发环境
2.2.2 Android开发环境
2.2.3 iOS开发环境
2.3 引擎中的混合编译
2.3.1 Java与C++的混合编译
2.3.2 Objective-C与C++的混合编译
2.4 引擎的启点
2.4.1 应用程序入口
2.4.2 引擎应用入口
2.5 丰富的示例程序
2.5.1 TestCpp示例项目
2.5.2 脚本示例项目
2.5.3 MoonWarriors示例项目
2.6 本章小结
第3章 引擎的核心??渲染框架
3.1 基本框架
3.1.1 引擎的位置
3.1.2 根源种子
3.1.3 子类结构
3.2 渲染框架
3.2.1 框架结构
3.2.2 摄像机类(CCCamera)
3.2.3 导演类(CCDirector)
3.2.4 场景类(CCScene)
3.2.5 图层类(CCLayer)
3.2.6 精灵类(CCSprite)
3.2.7 精灵集合类(CCSpriteBatchNode)
3.2.8 精灵帧缓冲(CCSpriteFrameCache)
3.2.9 Zwoptex纹理编辑器
3.3 文字与字体
3.3.1 TTF类型标签(CCLabelTTF)
3.3.2 BMFont标签类(CCLabelBMFont)
3.3.3 Atlas标签类(CCLabelAtlas)
3.4 菜单按钮
3.5 几何绘制DrawPrimitives
3.6 CocosBuilder编辑器
3.6.1 CocosBuilder使用指南
3.6.2 引擎中的应用
3.7 本章小结
第4章 动作功能
4.1 概述
4.2 动作基类
4.2.1 动作类的继承关系
4.2.2 动作基类CCAction的成员函数
4.2.3 类CCNode中与动作有关的函数
4.3 时间动作
4.3.1 及时动作
4.3.2 持续动作
4.4 组合动作类
4.4.1 序列动作类(CCSequence)
4.4.2 同步动作类(CCSpawn)
4.4.3 重复动作类(CCRepeat & CCRepeatForever)
4.5 可变速度类(CCEaseAction)
4.5.1 CCEaseIn、CCEaseOut和CCEaseInOut
4.5.2 EaseSineIn 、EaseSineOut 和EaseSineInOut
4.5.3 CCEaseBackIn、CCEaseBackOut和CCEaseBackInOut
4.5.4 EaseExponentialIn、EaseExponentialOut 和EaseExponentialInOut
4.5.5 CCEaseBounceIn、CCBounceOut和CCBounceInOut
4.5.6 CCEaseElasticIn、CCEaseElasticOut和CCEaseElasticInOut
4.6 速度类(CCSpeed)
4.7 延迟动作类(CCDelay)
4.8 跟随动作类(CCFollow)
4.9 扩展动作类
4.9.1 概述
4.9.2 翻页动作(CCPageTurn3D)
4.9.3 波纹动作(CCWaves3D)
4.9.4 格子动作类(CCGridAction)
4.10 动画动作类
4.10.1 精灵帧
4.10.2 精灵帧缓冲
4.10.3 动画类
4.10.4 动画动作
4.11 动画编辑器
4.11.1 概述
4.11.2 CocosBuilder编辑器中的精灵动画
4.11.3 SpriteX草莓编辑器
4.11.4 MotionWelder动画编辑器
4.12 样例程序
4.13 本章小结
第5章 用户交互
5.1 概述
5.2 玩家交互信息
5.3 触摸操作的处理机制
5.4 接收操作
5.5 分发机制
5.6 处理响应
5.7 多点触碰
5.8 加速计的响应函数
5.9 本章小结
第6章 游戏背景
6.1 概述
6.2 2D游戏背景的类型
6.3 砖块地图编辑器
6.3.1 地图编辑器概述
6.3.2 Tile Map Editor(砖块地图编辑器)
6.3.3 制作一张游戏地图
6.3.4 编辑器中的属性功能
6.4 砖块地图Tile Map
6.5 地图数据的格式
6.5.1 编辑器导出的文件
6.5.2 地图文件分析
6.6 砖块地图的实现
6.6.1 砖块地图类CCTMXTiledMap
6.6.2 地图图层类CCTMXLayer
6.6.3 地图物体层CCTMXObjectGroup
6.7 示例项目
6.8 背景的滚动与角色移动
6.9 多层背景滚动效果
6.10 本章小结
第7章 物理模拟与碰撞检测
7.1 概述
7.2 游戏中的碰撞检测
7.3 碰撞检测的方法
7.3.1 平面几何在碰撞检测中的应用
7.3.2 物体的包围盒
7.3.3 AABB碰撞检测技术
7.4 基本物理知识
7.5 你好!Box2D!
7.5.1 概述
7.5.2 物理世界
7.5.3 游戏中的两个世界
7.6 Box2D的基础知识
7.6.1 概述
7.6.2 概念定义
7.6.3 物理引擎的模块
7.7 引擎内核
7.7.1 基本配置
7.7.2 内存管理机制
7.7.3 工厂模式
7.7.4 数据单位
7.7.5 用户数据
7.8 物理世界World
7.8.1 创建和摧毁一个世界
7.8.2 让世界运转起来
7.8.3 探索世界
7.8.5 AABB查询
7.8.6 光线投射(Ray Casts)
7.9 形状Shapes
7.9.1 碰撞模块
7.9.2 形状Shape的作用
7.9.3 圆形(Circle Shapes)
7.9.4 多边形(b2PolygonShape)
7.10 框架Fixtures
7.10.1 动态模块(Dynamics Module)
7.10.2 框架(Fixtures)
7.10.3 密度(Density)
7.10.4 摩擦(Friction)
7.10.5 恢复(Restitution)
7.10.6 筛选(Filtering)
7.10.7 感应器(Sensors)
7.11 物体Bodies
7.11.1 物体定义
7.11.2 位置和角度(Position and Angle)
7.11.3 阻尼(Damping)
7.11.4 休眠参数(Sleep Parameters)
7.11.5 固定旋转(Fixed Rotation)
7.11.6 子弹(Bullets)
7.11.7 活动状态(Activation)
7.11.8 用户数据(User Data)
7.12 关节(Joints)
7.12.1 关节的定义(JointDef)
7.12.2 关节的属性
7.12.3 距离关节(Distance Joint)
7.12.4 旋转关节(Revolute Joint)
7.12.5 移动关节(Prismatic Joint)
7.12.6 滑轮关节(Pulley Joint)
7.12.7 齿轮关节(Gear Joint)
7.12.8 鼠标关节(Mouse Joint)
7.12.9 线性关节(Line Joint)
7.12.10 焊接关节(Weld Joint)
7.13 接触(Contants)
7.13.1 概述
7.13.2 接触类(Contact Class)
7.13.3 访问接触(Accessing Contacts)
7.13.4 接触监听器(Contact Listener)
7.13.5 接触筛选(Contact Filtering)
7.14 示例项目
7.14.1 Box2dTest示例项目
7.14.2 调试绘图DebugDraw
7.14.3 创建精灵刚体
7.15 本章小结
第8章 游戏中的声音
8.1 概述
8.2 音乐与音效
8.3 声音格式
8.4 CocosDenshion声音模块
8.5 背景音乐操作函数
8.6 声音音效操作函数
8.7 示例程序
8.8 本章小结
第9章 文件操作模块
9.1 概述
9.2 引擎文件操作模块
9.3 读取文件
9.4 写入文件
9.5 游戏中用户数据
9.5.1 游戏中的用户数据
9.5.2 用户数据的基本类型
9.5.3 读取与写入操作
9.6 示例程序
9.7 本章小结
第10章 内存管理机制
10.1 内存管理概述
10.2 引用计数
10.3 自动释放池
10.3.1 使用方法
10.3.2 实现原理
10.4 管理模式
10.4.1 引擎当中的应用
10.4.2 缓冲区
10.5 日志调试方式
10.6 本章小结
第11章 粒子系统
11.1 概述
11.2 粒子效果
11.3 粒子系统的来历
11.4 引擎当中的粒子系统
11.5 粒子的生命周期
11.6 粒子的属性
11.7 粒子发射器属性
11.7.1 发射器共有的属性
11.7.2 重力发射器模式(Gravity)
11.7.3 半径发射器模式(Radius)
11.8 粒子效果编辑器
11.8.1 概述
11.8.2 Particle Designer的使用方法
11.8.3 引擎中应用
11.9 本章小结
第12章 Lua脚本语言
12.1 概述
12.2 Lua脚本语言简介
12.3 为什么需要它?
12.3.1 简易性
12.3.2 可扩展性
12.3.3 高效性
12.3.4 可移植性
12.4 Lua脚本语言的语法
12.4.1 类型与数值
12.4.2 表达式
12.4.3 语句
12.4.4 函数
11.5 Lua在引擎中的应用
11.5.1 Lua与C/C++
11.5.2 引擎中的脚本引擎
11.6 样例程序
11.6.1 脚本引擎初始化
11.6.2 游戏内容的实现脚本
11.6.3 农场层的实现
11.6.4 菜单层的实现
12.7 本章小结
第13章 Cocos2D-HTML5引擎版本
13.1 概述
13.2 HTML的发展史
13.2.1 HTML版本
13.2.2 XHTML 版本
13.2.3 HTML5是未来之星
13.3 HTML5新特性
13.3.1 跨平台的特性
13.3.2 Canvas API
13.3.3 WebGL
13.3.4 其他特性
13.4 JavaScript语言基础
13.4.1 概述
13.4.2 变量
13.4.3 数据类型
13.4.4 运算符
13.4.5 语句
13.4.6 对象
13.4.7 函数
13.4.8 事件
13.5 Cocos2d-HTML5引擎
13.5.1 HTML5版本介绍
13.5.2 安装引擎
13.5.3 示例程序
13.5.4 引擎的架构
13.6 JS Binding技术的实现
13.6.1 概述
13.6.2 SpiderMonkey
13.6.3 示例程序
13.7 本章小结
第14章 引擎之外的附加功能
14.1 概述
14.2 网络通讯支持
14.2.1 HTTP介绍
14.2.2 curl库(libcurl)
14.2.3 HTTP在引擎中的应用
14.2.4 HTTP示例项目
14.2.5 Socket的介绍
14.2.6 BSD Socket在引擎中的应用
14.3 收费模式
14.3.1 下载计费
14.3.2 内置计费
14.3.3 广告版本
14.4 社交网络在游戏中的应用
14.4.1 Game Center
14.4.2 OpenFeint
14.5 数据分析
14.5.1 Flurry介绍
14.5.2 友盟
第15章 Cocos2D-X引擎的未来
15.1 概述
15.2 Cocos2D引擎的走势
15.3 Cocos2D-X引擎的不足
15.3.1 丰富的UI
15.3.2 完善的工具
15.3.3 支持网络通迅
15.3.4 版本的统一
15.3.5 数据安全
15.4 Cocos2D-X引擎增强的功能
15.4.1 良好的中文支持
15.4.2 游戏基本框架
15.4.3 游戏逻辑支持
15.4.4 脚本化编程
15.4.5 可视化的操作界面
15.5 会不会有Cocos3D?
15.6 本章小结

(1) 稳定压倒一切!游戏引擎首要标准就是稳定,必须能够保件游戏产品的顺畅运行。引擎为玩家提供稳定连续的游玩体验算是最本质的要求。如果游戏中经常的出现中断、崩溃或者画面错乱的问题,对于玩家的体验感损失非常大。
另外,从游戏开发的角度来看。通常引擎的开发者与游戏制作者不是同一人。游戏制作者并不熟悉引擎的编码。由于引擎大多进行封装,隐藏了内部的逻辑与调试信息。所以一个问题是由引擎内部产生的话,接下来的修补工作将是很难进行的。所以,稳定性是游戏引擎制作的首要标准。就算性能再强劲的引擎,如果问题重重的话,那也是无人问津的。
(2) 性能是引擎好坏的关键。引擎性能一方面是指游戏运行时的流畅度,实际的技术参数就是指每秒屏幕的刷新率。另一方面,就是指引擎、能够承载的运算量,比如是否可以进行复杂的物理模拟运算、能够支持多少个画面层次。它通常用来衡量一个引擎的好坏。这就好比汽车引擎的功率,游戏配备了性能强劲的引擎,就能够表现给玩家更多、更丰富的内容。如果把引擎比作心脏的话,一款好的游戏必须要拥有强劲、节凑均匀的心跳。所以性能好坏,通常是开发者选用引擎的标准。
(3) 好的引擎就要有丰富完善的功能。随着玩家对游戏的需求和硬件设备性能的日渐提高,现在的游戏引擎不再是一个简单的渲染引擎。它需要涵盖许多丰富的功能,比如二维图形绘制、三维图形绘制、多声道处理能力、人工智能、物理碰撞、文件存取、社区分享、UI界面、动画视频等等。丰富的功能为开发者提供了更多的选择,更能发挥游戏制作者的创造力。所以游戏引擎就像是一把多用途的瑞士军刀、或者是机器猫的口袋;开发者有了它能够应对各种各样的问题、满足玩家千奇百怪的口味。
(4) 简单易用才是引擎发展的王道。引擎是被用来制作游戏的工具,那么必然要易于使用。钻木取火是非常麻烦的一件事;但是有了打火机只需要轻轻一按,就能获得光明和温暖了。引擎也要发挥同样的作用。因为开发者使用引擎时,也要编写部分的代码。所以那些具备了简洁高效的程序接口、完善的技术支持文档的引擎将会更讨人青睐。

1.1 何为游戏引擎
什么是游戏引擎?对于第一次接触游戏开发的读者来说,还比较陌生。提到“引擎”一词,很容易想到汽车、轮船以及飞机。这些由机器驱动的交通工具,其能量的来源就是引擎。游戏引擎和汽车引擎在概念是一样的,都是驱动整体运转的核心部件。游戏产品的核心就是引擎,它是每款游戏的运行基础。引擎的好坏直接影响着游戏的品质。

1.1.1 游戏的核心?引擎引擎的概念应该是来自机器制造。它通常作为机器设备的动力核心,所以有人将引擎称作发动机。引擎最大的作用,就是能够为依附于它的部件提供能量。引擎对于机器的重要性不言而喻。如果以人体为比喻的话,引擎就好比心脏。试想一下没有了心脏,那人就变成僵尸了。同样,汽车没有了引擎,也只能依靠人推马拉。不过,就像心脏可以移植,引擎也是可以更换。一辆好车,一定要配有一个强劲的引擎。图1-1所示的就是一款跑车的引擎。单看其十缸的结构就能知道这是一款性能卓越的引擎。
1124

图1-1所示的引擎,是人类工业化艺术的最好呈现。现在汽车引擎的鼻祖是工业革命时人类发明的内燃机。如今的汽车引擎都是以燃油为主,也有使用混合动力的。由内燃机发展至汽车引擎,人们大约用了二十年的时间。在二十年间经历了无数次的技术革新。其实每一次技术的变革都不是突然发生,毫无根据的。而是制作行业发展到一定规模才出现的。所以引擎并不是上帝赐给人们的礼物,也不是来源于自然的神奇生命,而是人们知识的结晶。
对于游戏引擎,也是同样的道理。引擎也是一款游戏的核心,它为游戏中其他部分提供了功能服务。没有了强劲引擎的支持,游戏将会逊色许多,甚至遭到玩家的遗弃。许多老旧游戏产品的命运就是如此。由于被玩家抛弃,它们早已成为程序中的游魂野鬼,徘徊在电子芯片中阴暗角落。从世界上第一款游戏算起,至今也有三十年的时间了。在这期间游戏引擎的发展,也是逐渐形成、不断的推陈出新过程。
说明:在电子游戏初期,并没有核心引擎。引擎是在游戏技术发展了一段时间后产生的。
综上所述,无论是汽车引擎,还是游戏引擎,其制作技术仍然在不断的推陈出新。从早期简单、局限、低效的,到如今丰富、开放、高效;经过了许许多多开发者的辛勤工作。更少的损耗、更高的性能,这正是引擎设计与制作一直追求的目标。
虽然引擎是一辆汽车的重要部件,但它并不是整辆汽车。事实是引擎是一个独立的部件,能够从汽车里面取出的发动机。工人可以建造另外一个外壳,再将引擎安装入内,这就产生了一辆新的汽车。所以说引擎作为核心部件,是可以更换,也可以重复使用的。
游戏中的引擎也是如此。作为游戏的核心,它并不是游戏的全部。一款优秀的游戏引擎经常被用来制作很多游戏产品。这些产品在市场上将单独出售。因此为了保件引擎的通用性和标准化,引擎需要具备让游戏运行的基本功能,但不能含有游戏特有的功能。所以一款好的游戏引擎应该可以轻易的更新换代,又同时可以重复利用。
说明:因为有些引擎为了宣传效果,会使用和游戏相同的名字,比如Quake。致使许多人会混淆游戏引擎和游戏本身。

1.1.2 引擎的特点
在前面介绍中,读者知道了引擎的作用。在游戏和汽车中引擎有很多类似的概念。但是游戏引擎也有很多自身的特点。下面我们通过游戏引擎产生的过程,来了解它的特点。
正如前面所说,游戏引擎并不是一开始就有的,也是通过技术发展与革新。游戏引擎的概念首次出现在1990年id Software发型的Doom游戏当中。为了更好的展现游戏魅力,Doom开发者约翰?卡马克将其建立在一个性能优秀的内核之上。当时的游戏内核具备三个主要功能:游戏中画面的渲染、物体之间的碰撞以及音乐音效的播放。
说明:正是因为上述的原因,约翰?卡马克习惯被大家称为游戏引擎之父。

卡马克意识到内核所提供的功能完全可以脱离游戏而独立存在。内核可以被重复利用,作为今后其他游戏产品的内核。于是,他就把游戏中给玩家带来直观感觉的内容剥离掉,其中包括:图片数据、逻辑运算、游戏规则等等的。那么余下的内容就是重复利用的核心部分。这个核心部分后来就被定义为“引擎”。当然,具体工作可不是两句话这么简单。从那之后,由于引擎的诞生,游戏制作领域就进入了一个崭新的时代。开发者开创了一种全新的游戏开发模式: 游戏“引擎”开发。
引擎开发方式逐渐取代了原本一体化的开发方式。早期游戏制作时,一款游戏由许多的模块构成,它们紧密的结合很难单独拆分出来。这就导致原本的游戏产品除了升级优化,推出后续版本之外,别无他用了。当需要准备制作新的游戏时,并没有多少可以再次利用的功能。而引擎化的开发方式,则克服了低利用率的缺陷,充分利用开发者的工作成果。这种模块化,封装化以及良好扩展性的游戏开发方式,逐渐成为了主流。
如今开发者几乎都会使用引擎来制作游戏,很少有使用一体化开发游戏的方式了。那么选择一款优秀的游戏引擎,就成为游戏制作之前的首要目的了。怎样才算优秀的游戏引擎呢?作为第一次接触游戏开发的读者来说,很难做出决定。下面来介绍一些游戏引擎的特性作为参考。
说明:有些独立游戏开发者为了自娱自乐,仍然热衷于一体化开发方式。

第1章 Cocos2D-X引擎的介绍
如果你梦想着创造充满了价值和理念的世界,那么阅读本书将会介绍一个绝佳的途径。
游戏正在改变世界,改变人们的生活。它甚至被赋予了神圣的使命??重塑人类积极的未来。在游戏当中,人们可以感觉到平等、充实和愉悦。游戏让人们交际更加真实、深入和多元。游戏让娱乐业有更大的发展空间,有更多的经济收益,有更具想象力的挑战。通过本书的学习,读者将会掌握制作游戏的本领。制作游戏的过程,充满了兴奋和喜悦。相信阅读本书的读者中,每一个人都是喜欢游戏的,也喜欢创造和编写游戏。
本章节作为开篇的第一章,将会为读者介绍游戏引擎的概念。作为游戏制作的核心,引擎发挥着极其重要的作用。在众多引擎当中,我们选择了一款跨平台支持的2D游戏引擎??Cocos2D-X。它绝对是移动平台最火热的游戏引擎。通过为读者介绍其形成的历史,背景以及组成结构,让大家对游戏引擎,尤其是Cocos2D-X有整体的认识,知道一款游戏引擎需要具备哪些功能。Cocos2D-X游戏引擎的特点在于哪里?还会涉及一些引擎的安装与使用指南。最后,必须要说明的是,Cocos2D-X是一款免费开源的引擎。

1.1.3 知名的引擎介绍
从第一款引擎的出现,到现在已经过去了二十多年。这期间出现很多值得称赞的引擎。这些引擎各具特色。开发者使用它们也制作了许多为玩家喜爱的经典游戏。限于篇幅,很难逐个的为读者详细的介绍。但是读者也不能作为井底之蛙,只看到眼前一个游戏引擎。毕竟Coco2D-X引擎那些老牌游戏引擎比起来,只能算是新起之秀。单说游戏技术而言,移动平台依旧是在追随其他游戏平台已经实现的内容。
说明:最领先的游戏技术大多应用在个人电脑以及家用机平台。
从游戏发展的历史来看,移动平台的游戏产品在全球游戏产业中只能算是冰山一角。但是,它最为新型平台,蕴涵爆发的能量。其快速扩张的程度已经占据了一定的市场份额。几乎所有的知名游戏引擎厂商都十分注重甚至已经进入了移动游戏市场。短短几年的发展,iOS设备全球扩张的速度,足以威胁到了原本的游戏产业。我们都知道iOS设备推出之初,并不是为游戏打造的。但是根据AppStore的数据显示,人们最热衷的依然是游戏类的产品。据欧美国家统计,今年的圣诞节孩子们最希望的礼物,已经从家用游戏机转到iPad了。

dddddddddddddddddddddddddddddd

引擎名称 类型 技术 适用平台
虚幻 授权 3D 多平台
Unity 授权 3D/2D 多平台
Cry Engine 授权 3D PC和家用机
Cocos2D-x 开源 2D 手持设备
极品飞车系列 自主 3D 多平台
IW 自主 3D 多平台
表1-1中列出了一些知名的游戏引擎。它们是众多游戏引擎中的一部分。按照粗略的估算,在游戏产业中至少存在上百款游戏引擎。正是这些引擎推动了今天游戏产业的繁荣。大体上游戏引擎可以看作两类:2D和3D。这只是根据其产出的游戏产品来划分的。按照比例来看,3D游戏引擎占据了主流地位。这主要是因为3D技术的复杂度,导致一般开发者很难独立制作。所以会借助成熟的游戏引擎。而2D引擎因为技术比较成熟、容易实现、制作周期短;所以行业内的成熟产品不多。很多的2D引擎是开发团队或者公司内部使用的。
注意:有些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和Doom II。Doom 3引擎还在销售中。
自主研发引擎的方式,适合具备游戏开发经验,有一定技术实力的开发者团队或者公司。自主研发引擎需要时间、人力和资金投入的;这对于一些独立游戏开发团队是不小一笔前期开支。不过,自主研发引擎获得成功,这将是一个游戏团队最核心的价值。游戏开发者可以按照自己的意图去构建引擎来制作游戏。引擎相关的制作工具,也可按照开发团队的工作流程以及人员配备来制作。自主研发的方式可以让开发者充分发挥自由,量身定做属于自己的游戏引擎。不仅在技术具有自主的产权,也可以打造出独具特色的游戏,令他人无法模仿。
自主研发的方式,意味着游戏制作要从最基础的地方开始。这是一个从“无”到“有”制作过程。毫无疑问,自主研发的方式是游戏开发周期最长的,失败的风险也是最大的。作为自主研发引擎的开发者,需要有足够的耐心和不屈的毅力才能坚持到最后环节。只有将游戏产品推向市场,获得玩家的认可才有可能看到回报。所以如果开发者选择这样的方式时,就要有足够的信心和毅力,做好准备。因为在漫长的游戏开发阶段是没有利益回报,期待一举成名的美好夙愿是行不通的。
注意:开发者不妨选择逐步去完善游戏引擎,先推出初期版本而不是一气呵成的去打造完美无缺的引擎。

开源引擎是通过将引擎的源代码在网络分享,以不谋取任何商业利益为基础,公开发布的方式免费提供给开发者。开源引擎大多数是一些游戏爱好者将成源代码在网络中分享。开源引擎最大的好处,就是可以让全球各地的同好者参与其中。人人都可以贡献自己的代码、可以协助测试引擎、可以书写样例教程。这也是开发者们喜闻乐见的一种方式。
开源引擎最重要的一点,就是分享精神。这就好比人类文明,是由几千年来的人们共同创造而来一样。这些开源引擎被暴露在大庭广众之下,人人都可以提出修改意见。在哲学上,有句名言“真理总是越辩越明。”很适合用来描述开源的游戏引擎。所以那些存在越为长久、被人们关注越多的游戏引擎,其完整程度更高。
游戏制作者可以免费使用开源引擎进行来制作游戏,出售来获取利益。开源引擎的存在为很多资金有限的独立或者小型的游戏制作团队提供了便利。市场上也不乏一些使用开源引擎制作的优秀游戏。
说明:有些游戏引擎可能会经历三个阶段,从自主研发、到收费授权、到免费开源。比如Quake引擎和虚幻I引擎。这些开源的商业引擎,绝对是开发者初期学习的典范。

开源引擎非常适合快速开发的游戏产品,尤其是产品短小精干的移动平台为开源引擎提供了施展身手的舞台。据笔者所知一些业界知名的游戏厂商,在移动平台也会使用开源引擎来制作游戏产品,比如Gameloft、glu、EA等等。开源引擎是基于自主研发和授权引擎之间的一种方式。首先,开源引擎免费开放了源代码和工具并提供了相关的技术文档;开发者完全自由的对其进行二次开发,来打造一款属于自己的游戏引擎。其次,开源引擎的存在缩短了开发周期,开发者不需要从零开始来制作游戏。这些都是开源引擎为开发者带来的便利之处。
而相反的一面,由于开源引擎是网络分享的,是许多人共同协作贡献代码的产生出来的。这些人可能来自全球各地、使用不同的语言、具备高低不一的技术水平。这样的制作方式使引擎在性能和稳定性方面是没有保障。在互联网上存在着许多开源引擎,质量也是良莠不齐的。开发者应尽量选择获得多数人认可的,更新频繁的、历史悠久的开源引擎。
说明:选择更多开发者使用的开源引擎,意味将会获取更多经验和案例。
同时,使用开源引擎的开发者,需要具备一定水平的技术实力来解决问题。开源引擎贫乏的技术支持,也是其缺点的之一。它并没有完善详细的技术文档和范例,也没有制作人员来帮你解决问题。开源引擎的产生大多是出于制作者本身的兴趣和技术分享的精神来完成的。由于制作者时间和精力上受限,所以多数的开源引擎并不存在配套工具。
不过有一点值得肯定的,那就是开源引擎在游戏技术的推广上起到了极大的作用。任何开发者在开始制作游戏之前都参考其源代码。从它们之中学习技术、汲取经验。开源引擎大多遵从的某一个开源许可件。符合开源软件定义的许可件有GNU GPL、BSD、X Consortiun和Artistic等,它们之间存在一些细微的差异。
说明:在使用开源游戏引擎之前,最好仔细的阅读一下协议声明。并不是所有的开源引擎都可以用来获利的。

1.2 Cocos2D-X引擎的来历
Cocos2D-X游戏引擎并不是最初的版本。从名字读者就能看出最早的版本其实为Cocos2D引擎版本。追溯起来,Cocos2D引擎已经有五年的历史了。在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所示:
1125

图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引擎衍生出了很多的版本。
1126

开发者社区也涌现出丰富的工具和编辑器,其中有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至今已经度过了四年。四年的时间正好是一届奥运会的间隔。索然Cocos2D引擎没有与其他的引擎竞赛,但其版本更新的速度毫不逊色。能保持如此频率的更新升级,除了来自开发者辛勤的工作之外,还得益于人们对于此款游戏引擎的喜爱。正是因为有了众多开发者的关注,才促使它成长到今天的地步。
在四年的时间里,Cocos2D引擎其至少推出了十个主要版本。每个版本都存在一些变化:修正了一些存在问题,加入了新的功能等等。这其中有一些重要的版本变化。0.90版本算是一次重大升级,采用了全新的类名体系。这也标志着这个平台变得越来越成熟,越来越好用。从0.99.0版本开始,凭借丰富的功能以及简单易用的程序接口,成为了开发者的首选。Cocos2D引擎就登上了iOS平台游戏引擎的王座,进入了鼎盛时代。
说明:截至到2012年12月12日,Cocos2D引擎最新的稳定版本为2.0。
Cocos2D版本是引擎发展的主旋律,Cocos2D-X版本也是按照其节奏来推陈出新的。以版本号来区分,引擎可以分为两个分支:以1开始标号的是支持OpenGL ES 1.x,由于年代久远已经不再维护了;以2开始标号的是支持OpenGL ES 2.0之后的版本。Cocos2D-X最新的稳定版本为2.0。只有一些专属平台还存在0.X以及1.X的引擎版本。比如Windows Phone 8平台的0.13版本以及应用HTML5的0.5.0版本。
说明:OpenGL ES为引擎所用的3D渲染库,它是实现跨平台的核心技术。
因为基于Cocos2D-X引擎采用了C++语言编写,所以可以同时支持的多个手持设备平台。它成为了开发者进行移动游戏产品的跨平台开发首选。另外,Cocos2D-X引擎也为使用C++语言的开发者找到了一条进入Android和iOS以及Windows Phone平台开发捷径。