Cocos2d-x 高级开发教程
1
Cocos2d-x 高级开发教程
Cocos2d-x 高级开发教程
2
前言
Cocos2d-x 是一个通用平面游戏引擎,基于一个同样十分著名的游戏引擎 Cocos2d-iPhone 设计。它继承了 Cocos2d 系列引
擎一贯的特点:使用简单,运行高效、灵活,且功能强大。
与 Cocos2d-iPhone 不同的是,Cocos2d-x 还拥有强大的跨平台能力,只需要编写一次代码,就可以无缝地部署在包括 iOS、
Android、Windows、OS X 在内的许多主流游戏平台之上。在移动终端日趋多样化的今天,把游戏部署到多种平台是游戏开
发的大趋势,Cocos2d-x 的跨平台能力无疑为开发者节省了大量的时间和精力。
本书的主要目的是向读者介绍 Cocos2d-x 这个十分优秀的平面游戏引擎。阅读完本书前三部分之后,读者会对 Cocos2d-x
的各个方面都有比较深入的了解,并且也会对游戏开发的过程以及技巧有了一定的认识,可以得心应手地使用 Cocos2d-x
进行游戏开发了。
同时,本书第四部分介绍了一些最新的游戏开发技术,包括多平台开发、可视化开发、游戏移植,以及 Cocos2d-HTML5。它
们作为 Cocos2d-x 的补充,为游戏开发者带来了极大的便利。阅读完这一部分之后,读者将对游戏开发的趋势有一个新的
认识。
示例代码
本书采用了时下最热门的游戏《捕鱼达人》作为游戏示例。《捕鱼达人》由北京触控科技有限公司开发,采用 Cocos2d-x
作为游戏引擎。在本书中,我们以开发自己的《捕鱼达人》作为主线,一边讲解游戏开发技术,一边不断地完善捕鱼游戏,
并最终引导读者实现属于自己的《捕鱼达人》。
为了使读者可以完整地体验一次游戏开发流程,本书还在第五部分安排了实战演练章节,带领读者体验真正的游戏开发:
从创建空项目开始,然后进行首轮开发与多次迭代,最终得到可以运行在移动设备上的游戏成品。
本书示例游戏中包含的所有资源文件,都源自触控科技有限公司授权使用的《捕鱼达人》原版资源文件。读者可以从图灵
社区(www.ituring.com.cn)本书主页免费获取实战章节中的代码,以及所使用的资源文件。
读者背景
阅读本书需要具备一定的计算机知识以及编程功底。Cocos2d-x 采用 C++编写,熟练掌握 C++语言对于学习本书是很有必要
的。此外,本书第四部分涉及了游戏多平台的话题,在阅读这一部分时,根据读者不同的需求,也许还需要了解 JavaScript、
Objective-C 以及 C#的知识。
本书是针对 Cocos2d-x 游戏开发者撰写的,无论是初学者、有一定经验的开发者,还是对引擎内部工作原理有兴趣的读者,
都十分适合阅读本书。
对于初学者:本书前两部分从游戏开发的基础知识开始,详细介绍了游戏开发的方法以及所使用的工具,初学者可以轻松
入门。
对于从事过游戏开发,包括使用过其他 Cocos2d 引擎的读者:本书利用《捕鱼达人》作为示例,完整展示了游戏从开发到
部署的各个环节。书中不仅介绍了 Cocos2d-x 中常用的功能与技巧,还探讨了许多配合 Cocos2d-x 所使用的高级技术,涵
盖游戏效率优化、网络通信和游戏移植等时下热门的话题。
对于好奇引擎工作原理的读者:本书第一部分与第二部分穿插剖析了 Cocos2d-x 的核心代码,为读者理解引擎的工作原理
提供了清晰的思路。配合本书来研究 Cocos2d-x 的代码是一个很好的选择。
本书分工与致谢
Cocos2d-x 高级开发教程
3
本书的主要作者为尹航,整体设计及撰写思路由马朔负责,第 1 章至第 7 章、第 8 章、第 10 章、第 17 章至第 20 章,以及
附录 A 由尹航编写,第 9 章、第 11 章至第 16 章由丁伟杰编写,第 21 章由张三华编写。
在此,首先要感谢北京触控科技有限公司以及 Cocos2d-x 开发团队对本书提供的多方面的帮助,他们共同为本书提供了最
权威的技术支持。感谢中山大学在团队发展过程中所给予的大力支持。同样感谢马朔带领下的火烈鸟网络所有成员对本书
的贡献,他们是叶思聪、彭颖辉、潘阳和郑浩等,没有他们的努力,就不会有这本书。本书的插图由尹航的女友赵婉滢提
供,感谢她提供的精美插图以及在本书编写过程中的支持与耐心。最后,感谢所有为本书提出评论、建议以及支持的朋友:
周顺帆、小小、Hana 以及其他的朋友们,他们的建议使得本书更加完善。
由于笔者水平有限,书中内容难免会有错误或疏漏,欢迎读者批评指正。
目录(1)
第一部分 引擎基础
第 1 章 Hello Cocos2d-x 2
1.1 引擎简介 2
1.2 搭建开发环境 3
1.3 Hello World 5
1.4 Hello World 分析 6
1.5 测试样例简介 10
1.6 小结 11
第 2 章 在游戏开始之前 12
2.1 基本概念 12
2.1.1 场景与流程控制 12
2.1.2 层 13
2.1.3 精灵 14
2.1.4 节点与渲染树 14
2.1.5 动作与动画 16
2.2 Cocos2d-x 代码风格 16
2.2.1 命名空间与类名称 16
2.2.2 构造函数与初始化 17
2.2.3 选择器 18
2.2.4 属性 19
2.2.5 单例 20
2.3 C++中的 Cocos2d-x 内存管理 21
2.3.1 复杂的内存管理 21
2.3.2 现有的智能内存管理技术 21
2.3.3 Cocos2d-x 的内存管理机制 22
2.3.4 工厂方法 25
2.3.5 关于对象传值 26
2.3.6 释放:release()还是
autorelease()? 26
2.3.7 容器 27
2.3.8 相关辅助宏 28
2.3.9 Cocos2d-x 内存管理原则 28
2.4 生命周期分析 29
2.5 小结 31
Cocos2d-x 高级开发教程
4
第 3 章 游戏的基本元素 32
3.1 CCDirector:大总管 32
3.2 CCScene:场景 33
3.3 CCLayer:层 34
3.4 CCSprite:精灵 35
3.4.1 纹理 35
3.4.2 创建精灵 35
3.4.3 设置精灵的属性 36
3.4.4 向层中添加精灵 36
3.4.5 常用成员 38
3.5 CCNode 与坐标系 39
3.5.1 坐标系与绘图属性 40
3.5.2 节点的组织 43
3.5.3 定时器事件 44
3.5.4 其他事件 46
3.6 Cocos2d-x 内置的常用层 46
3.7 Cocos2d-x 调度原理 49
3.7.1 游戏主循环 50
3.7.2 定时调度器 53
3.8 小结 58
第 4 章 动作 60
4.1 基本概念 60
4.2 瞬时动作 61
4.3 持续性动作 62
4.3.1 位置变化动作 63
4.3.2 属性变化动作 64
4.3.3 视觉特效动作 65
4.3.4 控制动作 65
4.4 复合动作 66
4.5 变速动作 68
4.6 使鱼动起来 70
4.7 创建自定义动作 74
4.7.1 一点简单的物理知识 74
4.7.2 创建自定义动作 75
4.8 让动作更平滑流畅 77
4.9 Cocos2d-x 动作原理 79
4.9.1 动作类的结构 79
4.9.2 动作的更新 80
4.9.3 CCActionManager 的工作
原理 81
4.10 小结 83
第 5 章 动画与场景特效 84
5.1 动画 84
5.1.1 概述 84
5.1.2 使用动画 85
Cocos2d-x 高级开发教程
5
5.2 场景特效 86
5.3 小结 87
第 6 章 音乐与音效 88
6.1 使用音效引擎 88
6.2 支持格式 89
6.3 播放音乐与音效 89
6.3.1 预加载 89
6.3.2 播放与停止 90
6.3.3 暂停与恢复播放 90
6.3.4 其他成员 91
6.4 小结 92
第 7 章 用户输入 93
7.1 触摸输入 93
7.1.1 使用 CCLayer 响应触摸事件 93
7.1.2 两种 Cocos2d-x 触摸事件 94
7.2 触摸分发器原理 97
7.3 触摸中的陷阱 100
7.4 使用触摸事件 100
7.4.1 使炮台动起来 100
7.4.2 识别简单的手势 103
7.5 加速度计 105
7.6 文字输入 107
7.7 小结 110
第二部分 引擎进阶
第 8 章 粒子效果 114
8.1 Cocos2d-x 中的粒子系统 114
8.2 粒子效果编辑器 117
8.2.1 界面介绍 117
8.2.2 制作火焰特效 121
8.3 小结 124
第 9 章 大型地图 125
9.1 瓦片地图 125
9.2 编辑器 126
9.2.1 Tiled Map Editor 简介 126
9.2.2 创建水底世界 127
9.3 导入游戏 131
9.4 实现层次感 132
9.5 预定义属性 135
9.6 小结 135
第 10 章 Cocos2d-x 绘图原理及优化 136
10.1 OpenGL 基础 136
10.1.1 OpenGL 简介 136
10.1.2 绘图 140
10.1.3 矩阵与变换 143
10.2 Cocos2d-x 绘图原理 145