《Cocos Creator游戏开发实战》
游戏开发与设计技术丛书
Cocos Creator游戏开发实战
满硕泉 著
Forword 序 一
从入行那天起我就认为,程序开发这一行,不是为了向人证明我们的技术有多牛,也不是为了仅仅成为一个很牛的程序员,而是为了有朝一日能开发出自己梦想中的那款游戏!
最初认识满硕泉,是2012年通过他的博客,那时我是Cocos官方开发团队的核心成员之一(当年Cocos的C++版本名称为Cocos2D-X,后来社区所有版本统称为Cocos),当时我们开发者社区远不如现在发达,官方团队人力有限,所以更多是专注于技术研发,官方文档也寥寥无几。而以满硕泉为首的一批资深游戏开发工程师,开始成为Cocos技术布道的中坚力量。
Cocos从2010年发布第一个版本到现在,历经9个春秋,目前累计拥有超过100万的注册开发者,超过30万的月活跃开发者,在移动游戏的通用引擎领域,其市场占有率国内第一,全球第二,而且远远甩开全球第三名占有的市场份额(是其7倍)。
2012年开始,Cocos2D-X(C++版本)独立于Cocos2D社区,并在后来几年统一Cocos2D社区所有语言版本,改名为Cocos。从2013年开始,市面上不断涌现出手游现象级产品,包括从《捕鱼达人》《保卫萝卜》《我叫MT》《刀塔传奇》《别踩白块》等,到近年的《梦幻西游》《火焰纹章》《热血传奇》《征途》等大作。
也就是说,如果你在中国做游戏,不论你的研发预算是几万、几十万还是几百万元,你都可以使用这套开源、免费,经过数以万计游戏证明过的成熟引擎,开发出商业成功的游戏,做到几亿的月流水,并建立几十亿估值的公司,最终实现财富自由。Cocos如今已打破了游戏大厂的技术壁垒,使用Cocos引擎开发游戏,在技术上和网易《梦幻西游》、任天堂的《火焰纹章》、盛大的《热血传奇》、巨人的《征途》等大作,其实是站在同样的起跑线上。
作为Cocos最重要的开发工具,Cocos Creator其实是Cocos团队提供的第二代编辑器。这套技术的积累可以追溯到2012年以前的Cocos2D-HTML5版本和Cocos2D-JS版本。这样的技术选型与技术积累,也让游戏除了能发布到移动App、PC平台和传统Web平台以外,还更好地支持了近年来最火的小游戏。技术方面,和前一代编辑器CocosStudio不同的是,Cocos Creator使用的是数据驱动的工作流程,你可以搭建独立的场景,制作的动画和特效也可以随时在编辑器组件中实现所见即所得。数据驱动的开发流程也同样将数据和功能分离开来,即解放游戏开发工作流程中的各个工种,并通过组件实现协作。
本书作为最早的Cocos Creator书籍之一,也必将成为入门必备、进阶必修的教材。
更重要的好消息是,作者已经将本书内容升级,本书是基于最新的Cocos Creator 2.x版本撰写的。
全书以深入浅出的方式展开介绍,通过“准备篇”可以全面了解Cocos和Cocos Creator的发展历史和基本知识;通过“基础篇”可以学习基本功能,以及各个组件的操作和使用方法;通过“实例篇”中介绍的已有的案例,了解游戏各个部分的实现过程、细节和方法,最后通过“扩展篇”了解技术的难点、高级知识点之外,你甚至可以学习如何将游戏做成成品发布。也就是说,本书包含引擎和工具的方方面面,并且对知识点进行了归纳整理,书中语言通俗易懂,将大大加快你的学习速度!
我作为Cocos官方团队成员之一,非常荣幸受邀为本书写序,我认为这将是Cocos Creator近年来最重要的书籍之一。我们也一直很感谢作者满硕泉对开源社区做出的贡献,正是有像他一样的布道师,整个开发者社区才会充满活力,中国的游戏行业才会朝气蓬勃。也祝愿本书的读者能在书中受益,未来在游戏行业大展宏图。
最后以《爱丽丝梦游仙境》的红桃皇后定律来结束本序:
爱丽斯和红桃皇后手拉着手一同出发,但不久之后,爱丽斯发现他们处在与先前一模一样的起点上。
“为什么会这样?”爱丽斯大叫,“我觉得我们一直都待在这棵树底下没动!”
“废话,理应如此。”红桃皇后傲慢地回答。
“但是,在我们的国家里,”爱丽丝说,“如果你以足够的速度奔跑一段时间的话,你一定会抵达另一个不同的地方。”
“现在,这里,你好好听着!”红桃皇后反驳道,“以你现在的速度你只能逗留原地。如果你要抵达另一个地方,你必须以双倍于现在的速度奔跑!”
现在,作者将带我们以双倍的速度奔跑,还等什么,瞄准你梦想的游戏,出发!
杨雍,触控科技西南区总经理(前触控科技Cocos引擎核心开发成员)
Forword 序 二
自2016年1月Cocos Creator 发布公测版本以来,已经过去三年时间,并从2018年8月开始正式进入 2.0 时代。在这段奇妙的旅途中,最让我们欣喜的一直是越来越活跃的中文开发者社区。如果将Cocos Creator 的社区比作一座岛屿,那么满硕泉的这部作品为这座岛屿架起了极其重要的一座桥梁,让对游戏抱有无比热情的伙伴们走进来,在Cocos Creator 的港口造出自己的游戏并扬帆起航!
在这部出色的作品中,满硕泉由浅入深展开介绍,从Cocos Creator 的基本环境到各个模块的使用,帮助开发者们轻松上手。更可贵的是,在各个模块的讲解中,本书辅以非常实用的案例来展示功能模块在实际项目中是如何应用的。满硕泉更以自己8年的移动平台游戏开发经验为坚实的后盾,分享了消除、飞行、棋牌这三大品类游戏的完整案例。本书的最后一部分,则就游戏开发中的一些难点或实际问题进行深入挖掘,比如热更新方案和性能优化。我相信这部作品的全面性,不仅对刚接触Cocos Creator 的读者大有裨益,即便是经验丰富的游戏开发者,也能够从中发现很多值得学习和取用的经验。
Cocos一直以来的愿景都是“让游戏开发更简单”,我们希望让更多热爱游戏的人们参与到这个行业。我们相信,更多创作者的加入,更多元化的思想,可以催生无数有趣、富有想象力的游戏。而这一切的基础,就是真正降低游戏开发的门槛。我希望正在读这本书的你,也能够用满硕泉倾囊相授的知识和Cocos Creator这个工具实现自己最美好的想象!
Enjoy!
凌华彬,Cocos Creator引擎主程
前 言 Preface
为什么要写这本书
“你可以成为这样的人,如果你热爱你做的事,愿意付出相应的劳动,你终将有所得。你在夜里独自工作,反复思考你所设计和制造的东西,为之花费的每一分钟都是值得的。我敢肯定地告诉你,你的付出是值得的。”
—苹果公司的创始人之一史蒂夫·沃兹尼亚克
《沃兹传·与苹果一起疯狂》
相信很多移动游戏开发者都有同样的感受,就是累并快乐着,累是因为我们在一个竞争激烈的行业里,快乐则是因为我们在做着自己热爱的事情。相信对于很多移动游戏开发者来说,都有一个忠实的“伙伴”,那就是你所使用的游戏引擎。由于开源的特点和支持Android和iOS两大平台,Cocos引擎成为众多游戏引擎中的佼佼者,与此同时,Cocos引擎团队不断迭代自己的工具链以跟上技术和平台的发展,让工程师可以把更多精力投入到游戏本身的开发上。截至2017年年底,Cocos2D-X在全球拥有超过100万注册开发者,在中国市场占有率为45%,在全球市场占有率为18%,是中国第一、全球第二的手机游戏引擎。
随着网页游戏的发展,轻量化游戏方兴未艾,Cocos 引擎团队推出了Cocos Creator开发工具。Cocos Creator是以内容创作为核心的游戏开发工具,在Cocos2D-X基础上实现了彻底脚本化、组件化和数据驱动等特点,实现了一体化、可扩展、可自定义工作流的编辑器,并在Cocos系列产品中第一次引入了组件化编程思想和数据驱动的架构设计,这极大地简化了游戏开发工作流中的场景编辑、UI设计、资源管理、游戏调试和预览、多平台发布等工作,使开发者的精力可以更多地投入到游戏内容的创作上,可以说,Cocos Creator已经成为开发团队进行团队协作开发的最佳选择。
从Cocos Creator发布伊始,作为Cocos引擎的忠实用户,我就一直在关注,当公司要立项一个网页游戏并打算采用全新的引擎开发时,我第一个想到了Cocos Creator,但是项目组出于“想采用更成熟的技术”的考虑,选择了另一个推出时间更长的游戏引擎,结果项目后期的性能优化和一些功能的开发受到了引擎底层的制约,最后以失败告终。同样的例子在行业内我听说的不止一例,为什么我们放着更新、更好的技术不用呢?在经过与同行的讨论和自己的思考后,我觉得可能是受到学习成本和项目经验的影响,大家愿意用更成熟的技术。但是Cocos Creator基于Cocos引擎,本身就是成熟的技术,所以我一直想找机会为Cocos Creator做一些推广,让广大的开发者可以有勇气尝试更好的技术。
写这本书的起因是2018年年初,微信小游戏发布,机械工业出版社华章分社的杨福川老师和我一起聊到微信小游戏教程的话题,因为Cocos Creator在微信小游戏推广伊始就提供了支持,我当时就想到可以借着微信小游戏的“东风”,做一些Cocos Creator相关的教程,同时由于《Cocos2D-X权威指南》第2版已经出版3年多,相关技术需要一次更新,在经过讨论后,我决定写一本介绍Cocos Creator的书。我已经在游戏行业打拼8年,使用Cocos引擎开发过一些上线的项目,经历过一些线上问题,我想把这些经验融入这本书里,可以说,本书是《Cocos2D-X权威指南》的一次全新更新,也是我个人开发经验的一次更新,我很珍惜这次机会。
《Cocos2D-X权威指南》已经出版3年多,我个人在这3年间也做了一些事情,我在南开大学完成了MBA的学习,同时我开始跑步锻炼,最近一年多,我参加了三场全程马拉松及两场半程马拉松的赛事,在这个过程中,我发现跑步和写作很像,一开始憧憬和期待,起步后担心自己完不成,到中间渐入佳境,后半程则力不从心和接近极限,直到跑完比赛,你会发现这个过程中的每一步都那么重要,都那么享受。同时,我也希望我的作品可以给读者带来更多的收获,能够让更多的人更好地使用Cocos Creator。
读者对象
Cocos Creator初级及中级开发者,了解游戏开发的读者;
没有接触过Cocos Creator,但有过Cocos其他版本开发经验的开发者;
没有Cocos Creator开发经验,但是有Unity、UE等游戏引擎开发经验的游戏程序员;
没有Cocos Creator开发经验,但是有其他语言开发经验的程序员;
游戏开发爱好者;
相关项目的策划及管理人员。
如何阅读本书
本书分为四大部分:
第一部分(第1~2章)为准备篇,首先对Cocos Creator的功能、特点和适用场景进行了宏观的介绍,然后介绍了如何搭建跨平台的开发环境。
第二部分(第3~8章)为基础篇,对Cocos Creator的场景制作、资源管理、脚本编程、UI系统、动画系统和物理系统进行了深入讲解,同时配备了大量的小案例。
第三部分(第9~11章)为实例篇,讲解了三个游戏案例的开发过程和方法,包括消除类游戏、飞行游戏和棋牌类游戏,旨在让读者深入了解Cocos Creator的基础知识在游戏开发中的实际使用,而且三种游戏分别代表了消除类、纵版射击和棋牌类,可以让开发者深入了解不同类型游戏的开发思想。
第四部分(第12~16章)为扩展篇,深入介绍使用Cocos Creator开发微信小游戏、扩展插件和SDK、游戏项目优化等高级话题。在此基础上进一步介绍游戏开发和引擎扩展等相关的知识,目的是让读者更加全面地了解Cocos Creator的使用。
如果你是一名对Cocos Creator有一定了解的开发者,可以从第3章开始阅读,而如果你是一个Cocos Creator的初学者,请从第1章开始阅读。
勘误和支持
由于水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为了方便与大家交流,我专门申请了一个qq讨论群(群号:514376849,验证信息为:cocoscreatorhzbook),大家有与本书相关的问题可以在群中提出,我会及时解答。
为了及时更新本书的项目源代码,我创建了本书的代码仓库,书中的全部源代码可以在GitHub(代码仓库地址:https://github.com/manshuoquan/CocosCreatorBook)中获取,项目的示例代码、本书工程和源代码也会同步更新。
同时你也可在作者的个人技术博客上获得本书的勘误和内容的更新(技术博客地址:https://manshuoquan.github.io)。
如果你有更多的宝贵意见,也欢迎发送邮件至邮箱manshuoquan@sina.cn,期待能够得到你们的真挚反馈。
致谢
感谢Cocos引擎的开发团队,感谢他们为广大游戏开发者开发出一款如此优秀的游戏引擎。感谢每个在GitHub上贡献代码的开发者,因为你们开放分享的精神,才使得这个世界更加美好。
感谢天津大学和南开大学对我的培养,感谢我的老师和同学们,特别是我的编程启蒙老师罗凯先生。
感谢我的老东家天津猛犸科技有限公司,感谢公司给了我进入游戏行业的机会,同时感谢公司对我的锻炼和栽培,使我对游戏开发由“好奇”变成“爱好”。做游戏可能是每个程序员最初的、浪漫的梦想,我有幸能有8年的游戏程序员经历,这8年会是我职业生涯中最难忘的8年,有甜蜜的梦想,有艰辛的汗水,有努力的奋斗,也有苦涩的眼泪。后来,我终于明白了,梦想并不是一定实现了才觉得幸福,追逐梦想的路同样值得享受。
感谢一路走来我工作中遇到的师长和好战友们,和他们并肩作战的日子我终生难忘,我在他们身上学到的东西让我对游戏开发有更深的认识和热爱。
感谢CSDN网站上每一位阅读我文章的网友们,是你们给了我信心,让我一直写下去,我会一直写下去!感谢《Cocos2D-X权威指南》的读者们,你们的支持也是我写作的动力,同时你们的鞭策激励着我进步。
感谢触控科技西南区总经理杨雍和Cocos Creator引擎主程凌华彬为本书写序,感谢Cocos引擎创始人王哲、资深Cocos开发者张磊(无脑码农)、资深Cocos开发者屈光辉(子龙山人)和蚂蚁金服资深工程师王德夫(唯敬)为本书写推荐,感谢资深Cocos开发者杨世玲对本书的帮助。
感谢机械工业出版社华章公司的副总编杨福川老师和编辑李艺老师,感谢二位老师在这一段时间中始终支持我的写作,二位老师的鼓励和帮助引导我能顺利完成全部书稿。可以说没有二位老师的帮助和支持,我不会有勇气写这本书。
感谢我的爷爷和奶奶,他们是我人生的启蒙老师,尽管他们已经离开这个世界,但是我依然能感受到他们对我的支持和爱。
最后感谢我的父母,他们不仅含辛茹苦把我抚养长大,还教给我很多做人的道理,为了他们我要更加努力。
谨以此书献给我最亲爱的家人,以及众多热爱游戏开发和Cocos引擎的朋友们!
满硕泉
写于中国天津
目录 Contents
序一
序二
前言
1.2.4 升级你的项目到Cocos Creator 2.0版本8
1.3.1 Cocos Creator和Cocos2D-X9
第4章 Cocos Creator的资源管理30
4.1 图片资源的管理30
4.1.1 图片资源的导入30
4.1.2 图集资源的制作和导入31
4.2 声音资源的管理32
4.2.1 WebAudio方式加载音频33
4.2.2 DomAudio方式加载音频33
4.3 预制体的创建和使用34
4.3.1 何为预制体34
4.3.2 预制体的创建和使用34
4.4 字体资源的管理35
4.4.1 位图字体的制作35
4.4.2 位图字体的导入和使用39
4.5 粒子资源管理39
4.5.1 粒子系统39
4.5.2 粒子系统的特点和构成40
4.5.3 Cocos Creator中的粒子资源41
4.6 Tiled地图集资源管理41
4.6.1 Tiled地图编辑器42
4.6.2 地图资源文件的导入和使用42
4.7 资源的导入和导出44
4.7.1 资源的导出44
4.7.2 资源的导入44
4.8 本章小结45
第5章 Cocos Creator脚本编程46
5.1 JavaScript基础46
5.1.1 JavaScript的变量及内置类型47
5.1.2 JavaScript的操作符和控制结构49
5.1.3 JavaScript实现面向对象50
5.2 Cocos Creator中的JavaScript51
5.2.1 创建和使用组件脚本51
5.2.2 使用cc.Class声明53
5.2.3 TiledMap地图操作55
5.2.4 脚本生命周期57
5.2.5 节点基本操作57
5.3 使用JavaScript进行资源管理58
5.3.1 使用JavaScript管理场景58
5.3.2 使用JavaScript管理资源59
5.4 JavaScript的组织模式62
5.4.1 模块化脚本62
5.4.2 插件化脚本63
5.5 JavaScript对象池64
5.5.1 对象池的概念64
5.5.2 对象池的使用64
5.6 本章小结65
第6章 Cocos Creator的UI系统66
6.1 基础渲染组件66
6.1.1 精灵组件66
6.1.2 Sprite的混合69
6.1.3 Label组件70
6.1.4 Camera摄像机72
6.2 Cocos Creator中的事件系统73
6.2.1 节点系统事件75
6.2.2 全局系统事件76
6.3 UI界面的适配和布局77
6.3.1 分辨率的适配78
6.3.2 UI界面的对齐策略79
6.4 常用的UI组件80
6.4.1 布局组件Layout81
6.4.2 按钮组件82
6.4.3 输入框组件EditBox84
6.4.4 富文本组件RichText86
6.4.5 进度条组件ProgressBar88
6.4.6 滑动器组件Slider89
6.4.7 页面容器89
6.4.8 复选框组件91
6.4.9 滚动列表92
6.5 实例:卡牌游戏的经典UI界面93
6.5.1 UI界面的设计93
6.5.2 UI界面功能制作94
6.5.3 界面相关逻辑开发95
6.6 本章小结98
第7章 Cocos Creator的动画系统99
7.1 Cocos Creator的动画系统99
7.1.1 Cocos Creator中的动作100
7.1.2 Cocos Creator的动画编辑器105
7.1.3 动画组件Animation和动画切片剪辑106
7.1.4 通过代码控制动画109
7.2 在Cocos Creator中使用粒子特效113
7.3 骨骼动画—DragonBone114
7.3.1 龙骨的基本介绍115
7.3.2 在Cocos Creator中使用骨骼动画116
7.4 Spine动画120
7.4.1 Spine的基本介绍120
7.4.2 在Cocos Creator中使用Spine动画121
7.5 实例:卡牌游戏经典战斗场景126
7.5.1 战斗场景的设计126
7.5.2 战斗场景的具体逻辑开发127
7.6 本章小结134
第8章 Cocos Creator的物理系统136
8.1 Cocos Creator的碰撞系统136
8.1.1 编辑碰撞组件137
8.1.2 碰撞分组管理138
8.1.3 使用脚本处理碰撞系统139
8.1.4 使用碰撞系统的示例141
8.2 Cocos Creator中的Box2D145
8.2.1 Box2D简介145
8.2.2 Cocos Creator中的Box2D146
8.2.3 Cocos Creator中的Box2D组件148
8.3 本章小结153
第三部分 实例篇
第9章 消除类游戏:快乐消消乐156
9.1 三消游戏的特点156
9.2 快乐消消乐游戏简介156
9.3 游戏模块的开发158
9.3.1 开始游戏模块158
9.3.2 游戏初始化模块160
9.3.3 初始化“棋盘”162
9.3.4 处理用户输入和物块消除逻辑164
9.3.5 声音和暂停172
9.4 本章小结174
第10章 射击类游戏:飞机大战175
10.1 纵版射击游戏的特点175
10.2 飞机大战游戏简介176
10.3 游戏模块的开发178
10.3.1 开始游戏模块179
10.3.2 选择角色模块实现181
10.3.3 游戏主界面显示模块183
10.3.4 敌机模块185
10.3.5 主角飞机模块187
10.3.6 游戏控制逻辑189
10.4 本章小结192
第11章 棋牌类游戏:欢乐斗地主193
11.1 棋牌类游戏特点193
11.2 斗地主游戏简介194
11.3 游戏模块的开发195
11.3.1 开始游戏模块196
11.3.2 卡牌类和玩家类197
11.3.3 游戏规则模块200
11.3.4 抢地主模块203
11.3.5 正式游戏模块207
11.4 本章小结212
第四部分 扩展篇
第12章 使用Cocos Creator开发微信小游戏214
12.1 微信简介214
12.2 微信小程序215
12.2.1 微信小程序简介216
12.2.2 申请开发账号216
12.2.3 微信小程序开发工具219
12.2.4 微信小程序程序结构220
12.2.5 发布和上线225
12.3 微信小游戏226
12.3.1 微信小游戏简介226
12.3.2 微信小游戏的开发228
12.3.3 使用Cocos Creator导出微信小游戏项目231
12.3.4 微信小游戏的资源管理233
12.3.5 接入微信小游戏的子域234
12.4 本章小结238
第13章 游戏中的地图算法239
13.1 Roguelike地图生成算法239
13.1.1 Roguelike游戏240
13.1.2 地图生成算法240
13.1.3 地图生成算法的具体实现241
13.2 A星算法249
13.2.1 启发式搜索算法原理249
13.2.2 什么是A星搜索249
13.2.3 A星算法在JavaScript中的实现251
13.2.4 跳点搜索257
13.3 本章小结261
第14章 Cocos Creator的扩展263
14.1 第一个扩展包263
14.1.1 Node.js的package.json264
14.1.2 Cocos Creator的第一个扩展包—Hello World266
14.1.3 进程间通信—IPC267
14.2 深入开发扩展269
14.2.1 入口程序269
14.2.2 为扩展包开发相应的功能270
14.2.3 扩展主菜单271
14.2.4 扩展编辑面板272
14.2.5 进程间通信的工作流程275
14.2.6 为插件提供组件和资源276
14.3 开发扩展页面276
14.3.1 定制界面模板276
14.3.2 界面排版278
14.3.3 界面元素279
14.4 扩展商店—Cocos Store280
14.4.1 从扩展商店获取插件280
14.4.2 提交插件到扩展商店280
14.5 多语言支持—i18n283
14.5.1 游戏开发的多语言化283
14.5.2 插件多语言285
14.6 本章小结286
第15章 Cocos Creator中的网络和SDK287
15.1 Cocos Creator中的网络接口288
15.1.1 XMLHttpRequest的使用288
15.1.2 WebSocket的使用290
15.1.3 SoekctIO的使用293
15.2 热更新解决方案295
15.2.1 Cocos引擎的热更新原理及流程295
15.2.2 Cocos引擎的热更新的使用方法299
15.3 Cocos Creator与游戏平台SDK301
15.3.1 AnySDK简介302
15.3.2 在Cocos Creator中使用AnySDK303
15.3.3 Cocos Analytics简介304
15.3.4 在Cocos Creator中使用Cocos Analytics305
15.4 本章小结306
第16章 游戏开发优化307
16.1 Cocos引擎渲染原理307
16.1.1 OpenGL ES简介308
16.1.2 可编程管线309
16.1.3 着色器310
16.1.4 Cocos引擎渲染原理315
16.1.5 在Cocos2D-X中使用shader319
16.1.6 实例:在Cocos Creator中使用shader321
16.2 游戏常用的设计模式328
16.2.1 命令模式329
16.2.2 享元模式330
16.2.3 观察者模式331
16.2.4 状态模式331
16.2.5 单例模式333
16.3 Cocos引擎游戏的性能优化334
16.3.1 Cocos2D-X的内存管理334
16.3.2 资源的优化337
16.3.3 利用Cocos2D-X的特性进行性能优化338
16.3.4 异步加载339
16.4 本章小结341
附录A 粒子特效的制作342
附录B Tiled地图的制作355
- 点赞
- 收藏
- 关注作者
评论(0)