前言

前言

近几年,手游行业的发展可谓是百家齐放、万紫千红。短短两年,便出现了多款月流水过亿,甚至是近十亿的产品,例如《刀塔传奇》《梦幻西游》《怪物弹珠》等,而这些游戏都是采用Cocos引擎开发的。

Cocos2d-JS作为Cocos引擎的下一个分支,从2014年3月份发布3.0 Beta版到现在已经经历两年的磨练了。这两年来,Cocos2d-JS取得的成绩不容置疑。再加上Cocos Creator编辑器的推出,Cocos引擎面向开发者脚本化已经成为趋势,而Cocos2d-JS正是官方现在主推的方案。

本书编写始于2015年4月,原计划6个月撰写完成,但直到2016年1月才最终完成,历经10个月。我常常调侃自己,这本书是我“十月怀胎”生出来的。在这10个月中,我过着机器般的生活,除了上班就是写书,偶尔有朋友约我周末一起出去玩,我只能问他们一句:“周末是什么,能吃吗?哪里有卖?多少钱一斤?”这样装疯卖傻,只是为了写出一本对得起自己、对得起读者的书。

在保证图书内容的同时,我更注重它阅读起来是否轻松愉快、通俗易懂、能够现学现用,所以,我对书中所有的内容都进行了精雕细磨,哪怕它只是一张图片、一行注释或者一小段代码,都精益求精。对我来说,这本书更像是一个产品,我尽可能地站在用户的角度去撰写和设计这本书,由衷地希望这本书能给广大开发者带来帮助,如此,我便心满意足了。

本书结构

本书共4部分,17章。

第一部分为基础篇,共7章,各章简述如下。

第1章“Cocos2d-JS介绍”:这一章介绍了Cocos引擎的家族史以及引擎的相关创始人,说明了Cocos2d-x和Cocos2d-JS之间的关系,详细介绍了Cocos2d-x引擎包的目录结构。

第2章“Hello World”:这一章介绍了Cocos2d-JS项目的目录结构,演示了环境搭建,讲述了如何通过Cocos Console创建、编译、运行和打包Cocos2d-JS工程。此外,还介绍了如何使用Cocos DevTools工具提高学习效率。在这一章中,你还可以了解到Cocos2d-JS游戏的启动流程。

第3章“核心框架”:这一章介绍了Cocos2d-JS核心框架相关的类,如cc.Directorcc.Nodecc.Scenecc.Layercc.Spritecc.Label等,还讲解了BMFont编辑器的用法。最后,我们开发了《保卫萝卜2》的主页面。

第4章“动作模块”:这一章介绍了cc.Action动作父类以及瞬时动作和持续动作,其中持续动作又包含属性变化动作、视觉效果动作以及复合动作。除此之外,还介绍了变速动作。最后,我们让《保卫萝卜2》主页面动了起来。

第5章“事件机制”:这一章介绍了事件管理器、触摸事件、加速计感应事件、键盘事件、鼠标事件、自定义事件等。最后,在这一章的实例中,封装了一个虚拟摇杆。

第6章“音频处理”:这一章介绍了cc.audioEngine的常用API,列出了Cocos2d-JS在各平台下支持的音频格式,并讨论了背景音乐应当在何时播放最为合适。最后,给《保卫萝卜2》添加了相关的音频。

第7章“屏幕适配”:这一章介绍了屏幕适配原理以及5种系统预设适配模式,分别是SHOW_ALLNO_BORDEREXACT_FITFIXED_HEIGHTFIXED_WIDTH,并交代了官方目前推荐的适配方案。

第二部分为进阶篇,共5章,各章简述如下。

第8章“数据存储”:这一章介绍了cc.sys.localStorage的用法,以及JSON和plist文件的读取。最后,完成了解锁《保卫萝卜2》“天天向上”玩法的开发。

第9章“粒子系统”:这一章介绍了cc.ParticleSystem类,并将cc.ParticleSystem类的属性划分为粒子配置、发射器类型、重力配置、径向配置、发射器位置、粒子纹理、粒子颜色以及混合函数等,还介绍了ParticleDesigner和ParticleEditor粒子编辑器。

第10章“UI控件”:这一章介绍了Cocos2d-JS中的UI控件,例如文本、编辑框、按钮、复选框、滑块、加载条、布局、滚动视图、列表视图以及分页视图等。

第11章“性能优化”:这一章介绍了Cocos2d-JS游戏开发的一些优化技巧,例如对象缓冲池cc.pool的使用,OpenGL/WebGL下可以使用批处理SpriteBatchNode进行优化,在Canvas中可以将不活跃的Layer烘培起来。在资源管理方面,介绍了SpriteSheet,SpriteSheet可以通过TexturePacker工具制作,并在这一章的最后抛出了TinyPng在线图片压缩云应用。

第12章“游戏地图”:这一章介绍了Tiled Map编辑器的用法,还讲解了cc.TMXTiledMapcc.TMXLayer以及cc.TMXObjectGroup类。

第三部分为高级篇,共4章,各章简述如下。

第13章“反射调用”:这一章介绍了如何在JavaScript中通过反射机制调用Objective-C和Java代码。

第14章“Chipmunk物理引擎”:这一章介绍了Chipmunk物理引擎中的基本物理概念,以及刚体、形状、约束、空间、碰撞检测、查询等。最后,做了一个拖动刚体的效果。

第15章“网络编程”:这一章介绍了OSI参考模型和TCP/IP参考模型,以及基于HTTP、WebSocket、SocketIO的通信。最后,完成了一个基于Node.js + Scoket.IO的在线聊天系统。

第16章“JavaScript Binding”:这一章介绍了Cocos引擎中的脚本绑定框架以及自动绑定,并深入探究绑定技术,一步一步演示如何绑定自己的C++类。最后,实现了SQLite3的绑定。

第四部分为实战篇,共1章,简述如下。

第17章“塔防游戏——保卫萝卜2”:这一章介绍了《保卫萝卜2》各个模块的开发,例如关卡设定、出怪逻辑、炮塔生成、路线生成、碰撞检测、游戏对象管理等。

读者对象

本书适合有一定JavaScript语法基础的读者。因为本书并没有讲解JavaScript语法,如果读者不熟悉JavaScript语法,那么我建议你先去阅读《JavaScript高级程序设计》或者《JavaScript面向对象编程指南》等书。

除此之外,再无其他要求,你可以是完全不懂Cocos引擎的初学者,也可以是有Cocos引擎其他分支(例如Cocos2d-x和Cocos2d-Lua)开发经验的开发者,甚至是有一定Cocos2d-JS游戏开发经验的开发者。

关于源代码

书中所有的源代码以及《保卫萝卜2》的实战代码均可在图灵社区本书主页(http://www.ituring.com.cn/book/1783)或我的Github仓库https://github.com/lingjianfeng中下载。

本书说明

  • 为了方便读者,本书每一章的参考资源、相关工具的下载地址等都放在随书源码中,你可以直接打开源码,将参考资源或下载地址复制到浏览器中直接打开,而不用自己手动输入。

  • 为了使读者能更快、更好地阅读代码,本书中的所有代码保持了代码高亮样式,并且采用表格的方式,明确标注出行号。其中,JavaScript代码高亮样式与WebStorm保持一致,C++代码与Xcode保持一致,Java代码和Eclipse保持一致。虽然本书不是彩色印刷,但是在黑白印刷上,代码依旧可以通过粗细来达到“高亮”效果,但愿我这样的坚持能给读者带来更好的体验。

  • 为了突出重点,不必要显示的代码我用//……替代,表示代码省略。

  • 为了节省版面空间,书中部分图片经过Photoshop处理,大部分裁剪掉了一些没用的空白区域等,这并不会影响读者理解相关知识点。

  • 为了提高代码注释的可阅读性,我在代码注释中保留了我个人的注释风格,采用中括号括起关键词,起到“高亮”效果,例如:// 加载[主页面]。

  • 本书所有软件默认采用Mac版。

  • 本书基于Cocos2d-JS 3.9版本编写。

  • 随书项目《保卫萝卜2》中的所有素材为飞鱼国际科技有限公司授权于本书作者,读者可以使用这些素材来学习Cocos2d-JS引擎,但是不可将其用在商业途径上,若有违反,飞鱼国际科技有限公司将追究相关人员的法律责任。

勘误信息

我们尽最大的努力确保正文和代码没有错误,但是人无完人,金无足赤,错误在所难免。如果读者发现书中的任何错误,例如错别字或者是代码片段无法运行等问题,我们都希望你能及时给我们反馈,你提交的勘误不仅能够让其他读者受益,也能帮助我们进一步提高图书的质量。

读者可以在图灵社区本书主页(http://www.ituring.com.cn/book/1783)的“勘误”页面提交勘误,编辑将会第一时间处理。此外,你还可以给我发送邮件,我的邮箱是183720950@qq.com,邮件主题请注明“图书勘误”,我将在收到邮件后的第一时间回复。或者,也可以在新浪微博中联系我,我的微博:@凌建风。

另外,也可以加Cocos2d-JS技术交流群(群号:186828918),与其他读者一起交流。

致谢

2014年6月22日,我从福建师范大学信息技术学院毕业后,便选择了Cocos游戏开发。作为游戏行业的新人,我很感谢在这一年多来一直帮助我、陪伴我的同事们,从他们身上我学到了很多知识,也成长了许多。另外,特别感谢我现在任职的飞鱼科技国际有限公司将《保卫萝卜》系列素材授权于我,也感谢触控科技将封面素材授权于我。

感谢Cocos2d-x引擎核心开发者屈光辉(子龙山人)对本书的写作风格给予的指导,并提供技术支持和部分章节技术校稿。

感谢Cocos2d-x引擎物理引擎集成作者余波提供技术支持并对部分章节进行技术校稿。另外,本书第14章大部分为余波编写,而我更多的则是负责语言组织、代码实现等工作。

感谢我的好友曾彬思对本书的写作提供了帮助以及校稿等工作。

感谢我的好友邱雷对本书的写作提供了帮助以及给予我精神上的鼓励。

感谢图灵的编辑王军花对本书进行文字校稿,并给予了我很多建议和写作技巧,而且在我一次一次拖稿的情况下,不但没有催稿,还一直鼓励我。

感谢我的室友们对我的理解和包容,因为我常常写到凌晨一两点,又或者是早上6点多爬起来写书,这无疑对他们的作息造成了一定的影响。

最后,感谢其他朋友们对我的支持和帮助,这些人中,有的给书提供技术支持,有的给予我精神上的鼓励,让我完成了本书,他们是(按照拼音排序):

陈龙(cnsoft)、陈志敏、傅思杰(偶尔e网事)、郭玉海、黄靖权、黄毅霖、江龙(龙辰忆梦)、林文海、邱磊(NetFly)、任珊(renshan)、唐梓文、徐斌杰、叶湘楠、尤泽钦、郑为满、钟东、朱圣樑、卓文理。

2016年1月于厦门

目录

  • 献词
  • 序一
  • 序二
  • 序三
  • 前言
  • 第一部分 基础篇
  • 第 1 章 Cocos2d-JS介绍
  • 第 2 章 Hello World
  • 第 3 章 核心框架
  • 第 4 章 动作模块
  • 第 5 章 事件机制
  • 第 6 章 音频处理
  • 第 7 章 屏幕适配
  • 第二部分 进阶篇
  • 第 8 章 数据存储
  • 第 9 章 粒子系统
  • 第 10 章 UI控件
  • 第 11 章 性能优化
  • 第 12 章 游戏地图
  • 第三部分 高级篇
  • 第 13 章 反射调用
  • 第 14 章 Chipmunk物理引擎
  • 第 15 章 网络编程
  • 第 16 章 JavaScript Binding
  • 第四部分 实战篇
  • 第 17 章 《保卫萝卜2》实战