第一部分 准备篇 2
第1章 Cocos2d-JS介绍 2
1.1 原生手机游戏和HTML5游戏 2
1.2 Cocos2d-JS的前世今生 4
1.3 一次开发,同时完成HTML5和原生游戏 5
1.4 Cocos2d-JS相比Cocos2d-x的优势和劣势 6
1.5 我们要准备些什么基础知识 6
1.6 本书适合人群 7
1.7 我们能学到什么 8
1.8 推荐的学习资源 8
第2章 跑起我们的HelloWorld 10
2.1 环境搭建 10
2.1.1 乞丐版装备——官方SDK和记事本足矣 10
2.1.2 土豪版装备——JS编程三剑客(WebStorm+Chrome+Fiddler) 14
2.1.3 旗舰版装备——再来个Visual Studio或Xcode 18
2.2 轻松搞定第一个Cocos2d-JS程序 19
2.2.1 建立第一个程序——HelloWorld 19
2.2.2 打开HelloWorld工程 20
2.2.3 运行HelloWorld 20
2.3 HelloWorld简约而不简单 22
2.3.1 程序的目录结构 22
2.3.2 它是怎么跑起来的 24
2.4 出发前再带上个武器——trace 26
第一部分总结 27
第二部分 做一个简单的小游戏 30
第3章 CocoS2d-JS的平面世界 30
3.1 Cocos2d世界的经纬度——坐标系 30
3.2 场景(Scene)组成了Cocos2d世界 31
3.3 Cocos2d世界物体的祖宗——节点(Node) 33
3.4 让2D世界层次化——层(Layer) 34
3.4.1 按层管理所有物体 34
3.4.2 把层扩展成各种功能的面板 35
3.5 二维世界的人物——精灵(Sprite) 36
3.6 天外有天——当层和精灵嵌套时怎么设置坐标 39
3.7 导演(Director)指挥一切 41
3.7.1 场景的切换 41
3.7.2 导演可以提供的信息 44
3.8 额外说说Cocos2d-JS的语法 44
3.8.1 JS面向对象和继承 44
3.8.2 有点麻烦的this 46
第4章 让世界来点动静 51
4.1 帧的概念 51
4.2 模仿胶卷电影——逐帧变化 52
4.3 现成的既定动作 54
4.3.1 基本动作 54
4.3.2 放一个连招——组合动作 59
4.3.3 让运动轨迹来多点花样 64
4.4 控制动作 66
4.4.1 停止动作 66
4.4.2 暂停/恢复动作 67
4.4.3 监听动作的开始与结束 68
4.5 播放声音 70
4.5.1 背景音乐 70
4.5.2 音效 70
4.5.3 音量 70
第5章 让玩家操纵这个世界 72
5.1 鼠标事件 72
5.2 触摸事件 75
5.2.1 单点触摸 75
5.2.2 多点触摸 77
5.3 键盘事件 79
5.4 重力感应器事件 81
5.5 游戏进入后台/恢复显示事件 83
第6章 控制小怪按时出现——定时器 84
6.1 每帧做点什么——scheduleUpdate 84
6.2 scheduleOnce取代熟悉的setTimeout 85
6.3 schedule取代setInterval 86
6.4 取消定时器 86
6.5 暂停恢复定时器 88
6.6 越来越慢的定时器 90
6.7 动手制作不变慢的定时器 92
第7章 游戏界面 96
7.1 纯手工打造 96
7.1.1 按钮(MenuItem) 96
7.1.2 开关按钮(MenuItemToggle) 102
7.1.3 菜单(Menu) 103
7.1.4 文本(LabelTTF) 107
7.1.5 输入框 108
7.2 可视化编辑 109
7.2.1 CocosStudio UI编辑器介绍 109
7.2.2 新建工程 111
7.2.3 UI元素的属性 112
7.2.4 UI元素的树形从属关系 113
7.2.5 导入图片 113
7.2.6 导出成果 114
7.2.7 回归手工——代码中加载UI文件 115
7.2.8 监听UI元素 117
第8章 不能光说不练——小小碰碰糖 122
8.1 功能说明 122
8.2 新建项目 123
8.3 制作糖果 124
8.4 游戏界面 125
8.5 一个新知识——遮罩(ClippingNode) 129
8.6 点击消除 134
8.7 补充糖果 137
8.8 关卡设计 139
8.9 保存进度——如何读写数据 141
第9章 把成果分享到网上 143
9.1 一句命令打包整个程序 143
9.2 文件太大,精简一下 146
9.3 世界上有免费的服务器吗 149
9.3.1 又当爹又当娘——Github介绍 149
9.3.2 开通免费的个人主页 150
9.3.3 方便的Windows客户端 151
9.4 发布碰碰糖游戏,PC手机都能玩 153
9.5 自定义类库让更新更方便 155
第二部分总结 158
第三部分 再做一个高大上游戏 160
第10章 走向高大上的必经之路——简单的性能优化 160
10.1 化零为整——SpriteSheet 160
10.1.1 零碎小图的问题 160
10.1.2 使用TexturePaeker 161
10.1.3 另一种Sprite初始化方式——SpriteFrame 163
10.2 分批处理——SpriteBatehNode 164
10.3 不要乱丢垃圾——缓存池(pool) 167
10.4 拍一张定妆照——位图缓存(BakeLayer) 171
第11章 让主角不再死板 173
11.1 帧动画(Frame Animation) 173
11.2 骨骼动画 176
11.2.1 什么是骨骼动画 176
11.2.2 CocosStudio动画编辑器(Animation Editor) 177
11.2.3 导出骨骼动画 180
11.2.4 在代码中加载骨骼动画 180
11.2.5 更好用的工具——DragonBones 183
第12章 动态的背景 188
12.1 视差滚动背景(ParallaxNode) 188
12.2 实现一个无穷的视差滚动背景 190
12.3 瓦片地图(TiledMap) 193
12.3.1 瓦片地图介绍 193
12.3.2 使用工具:Tiled Map Editor 194
12.3.3 在代码中加载瓦片地图 198
12.4 自行实现无限行走的瓦片地图 200
第13章 界面的文字有点丑 204
13.1 高级货位图字体(BMFont) 204
13.2 制作位图字体 205
13.2.1 BMFont 205
13.2.2 更特别的字体 207
13.3 使用位图字体 209
第14章 超炫的效果——粒子系统 211
14.1 粒子系统介绍 211
14.2 Cocos2d-JS的粒子系统 211
14.3 Cocos2d-JS提供的几种现成效果 215
14.4 参数太多手写太累——各种可视化编辑器 222
14.5 在代码中加载可视化编辑的粒子系统 223
14.6 让粒子系统自生自灭 224
第15章 尝试做一个更大的游戏——Hungry Hero(上篇) 226
15.1 游戏简介 226
15.2 将会用到什么技术 227
15.3 场景列表 228
15.4 超人的设计 230
15.5 食物的设计 232
15.6 障碍物的设计 232
15.7 咖啡和蘑菇的设计 233
15.8 背景的设计 233
15.9 音乐和音效 234
第16章 尝试做一个更大的游戏——HungryHero(下篇) 235
16.1 准备工作 235
16.1.1 代码架构 235
16.1.2 打包SpriteSheet 236
16.2 菜单界面的实现 237
16.2.1 添加界面元素 237
16.2.2 菜单 238
16.2.3 声音按钮 239
16.2.4 给画面添加动感 240
16.3 声音播放的统一管理 241
16.4 关于界面的实现 243
16.5 游戏数据的记录 245
16.6 游戏过程界面的实现 245
16.6.1 游戏UI 246
16.6.2 加入背景 248
16.6.3 结束画面 250
16.7 超人登场 252
16.7.1 超人的帧动画 252
16.7.2 游戏过程场景的框架 254
16.7.3 超人的几种状态 256
16.7.4 超人起飞 256
16.7.5 操控超人 258
16.7.6 超人的飞行过程 261
16.8 食物 263
16.8.1 使用缓存池 263
16.8.2 分离食物的逻辑 264
16.8.3 食物的移动 266
16.8.4 食物的四种排列 267
16.8.5 咖啡和蘑菇 271
16.8.6 超人和食物的碰撞检测 272
16.8.7 接入游戏过程场景 274
16.9 障碍物 274
16.9.1 封装四种障碍物 274
16.9.2 分离障碍物的逻辑 278
16.9.3 创建障碍物 279
16.9.4 障碍物的移动 280
16.9.5 碰到障碍物 281
16.9.6 接入游戏过程场景 282
16.10 游戏结束 283
16.11 加入特效,大功告成 285
16.11.1 碰撞障碍物的画面抖动 285
16.11.2 吃食物的效果 286
16.11.3 蘑菇和咖啡效果 287
16.11.4 极速状态下的风痕 289
第三部分总结 291
第四部分 把两个游戏做成原生手机游戏 294
第17章 咱们也来做APP 294
17.1 一次开发到处运行 294
17.2 Android调试和发布 295
17.2.1 命令行运行 295
17.2.2 命令行发布 297
17.2.3 可视化调试和发布——Cocos Code IDE 299
17.3 在iOS侧运行和发布 302
17.4 Cocos2d-JS App的启动过程 303
第18章 真是这么美好吗?更多问题来了 304
18.1 内存管理 304
18.1.1 内存管理机制 304
18.1.2 如何使用retain和release 309
18.2 HTML5和JSB接口差异 310
18.3 如何解决兼容问题 311
18.4 把碰碰糖和Hungry Hero部署到手机 313
18.4.1 碰碰糖的改造 313
18.4.2 HungryHero的改造 314
第四部分总结 320
第五部分 高级篇 322
第19章 订阅者模式——事件机制 322
19.1 谁更早知道这个事——事件优先级 322
19.2 不让别人知道——停止事件传递 324
19.3 自定义事件——eventManager 326
19.4 自己动手做更贴心的消息中心 328
第20章 屏幕尺寸适配哪家强 331
20.1 各种终端的屏幕尺寸 332
20.2 Cocos2d-JS屏幕适配大法 332
20.2.1 设计尺寸(WinSize)、可视尺寸(VisibleSize)和屏幕尺寸(FrameSize) 333
20.2.2 方案1——自适应拉伸 333
20.2.3 方案2——全显示 335
20.2.4 方案3——无黑边 335
20.2.5 方案4——固定高度 337
20.2.6 方案5——固定宽度 339
第21章 让死去的主角灰掉——渲染控制 342
21.1 让人羡慕的Flash效果 342
21.2 Cocos2d能模仿Flash吗 344
21.3 要从GPU说起 345
21.4 想怎么画就怎么画——自定义着色器(shader) 346
21.4.1 Cocos2d和OpenGL ES 346
21.4.2 画一个蓝色三角形 347
21.4.3 让原来彩色的精灵变黑白 351
21.4.4 着色器可以做更多 355
21.4.5 HTML5和JSB在着色器中的兼容问题 356
21.5 更简单的方式——混合模式(blendFunc) 357
21.5.1 混合模式介绍 357
21.5.2 利用混合模式 358
第22章 动态热更新 363
22.1 热更新的原理 363
22.2 Cocos2d-JS热更新的关键点 364
22.3 利用AssetsManager实现热更新 364
22.4 部署服务器测试热更新 371
第23章 想说的还有很多 374
23.1 怎么从单机走向网络 374
23.2 发布游戏需要知道的 375
23.3 接下来可以做什么 375
23.4 欢迎反馈问题给笔者Kenko 375
第五部分总结 376