第一篇 基础篇 3
第1章 准备开始 3
1.1 本书学习路线图 3
1.2 使用实例代码 4
第2章 Lua语言基础 7
2.1 环境搭建 7
2.1.1 Lua编辑工具 7
2.1.2 HelloLua实例测试 10
2.2 标识符和保留字 14
2.2.1 标识符 14
2.2.2 保留字 14
2.3 常量和变量 15
2.3.1 常量 15
2.3.2 变量 15
2.3.3 命名规范 15
2.4 注释 16
2.5 Lua数据类型 17
2.5.1 数据类型 17
2.5.2 type函数 18
2.5.3 数据类型转换 18
2.6 运算符 19
2.6.1 算术运算符 20
2.6.2 关系运算符 21
2.6.3 逻辑运算符 22
2.6.4 运算优先级 23
2.7 控制语句 23
2.7.1 分支语句 24
2.7.2 循环语句 25
2.7.3 跳转语句 28
2.8 表类型 29
2.8.1 字典 29
2.8.2 数组 30
2.9 字符串类型 31
2.9.1 字符串截取 31
2.9.2 字符串转换 32
2.9.3 字符串查询 33
2.9.4 字符串格式化 33
2.10 函数 34
2.10.1 使用函数 34
2.10.2 变量作用域 35
2.10.3 多重返回值 35
2.11 闭包函数 36
2.11.1 嵌套函数 36
2.11.2 返回函数 37
2.11.3 使用闭包表达式 38
2.12 Lua中的面向对象 39
2.12.1 Lua中的对象 39
2.12.2 类的实现 40
本章小结 41
第3章 Hello Cocos2d-x Lua 42
3.1 移动平台游戏引擎介绍 42
3.2 Cocos2d游戏引擎 42
3.2.1 Cocos2d游戏引擎家谱 42
3.2.2 Cocos2d-x引擎 43
3.2.3 JavaScript和Lua绑定 44
3.3 搭建Cocos2d-x Lua开发环境 45
3.3.1 搭建Cocos Code IDE开发环境 45
3.3.2 下载和使用Cocos2d-x Lua官方案例 46
3.4 第一个Cocos2d-x Lua游戏 49
3.4.1 创建工程 49
3.4.2 Cocos Code IDE中运行 53
3.4.3 工程文件结构 54
3.4.4 代码解释 55
3.5 重构HelloLua 59
3.6 Cocos2d-x Lua核心概念 61
3.6.1 导演 62
3.6.2 场景 62
3.6.3 层 63
3.6.4 精灵 65
3.6.5 菜单 65
3.7 Node与Node层级架构 66
3.7.1 Node中重要的操作 66
3.7.2 Node中重要的属性 67
3.7.3 游戏循环与调度 69
3.8 Cocos2d-x Lua坐标系 71
3.8.1 UI坐标 71
3.8.2 OpenGL坐标 72
3.8.3 世界坐标和模型坐标 73
本章小结 77
第4章 标签和菜单 78
4.1 使用标签 78
4.1.1 LabelTTF 79
4.1.2 LabelAtlas 80
4.1.3 LabelBMFont 82
4.1.4 Cocos2d-x 3.x标签类Label 84
4.2 使用菜单 87
4.2.1 文本菜单 88
4.2.2 精灵菜单和图片菜单 90
4.2.3 开关菜单 92
本章小结 94
第5章 精灵 95
5.1 Sprite精灵类 95
5.1.1 创建Sprite精灵对象 95
5.1.2 实例:使用纹理对象创建Sprite 96
5.2 精灵的性能优化 98
5.2.1 使用纹理图集 98
5.2.2 使用精灵帧缓存 101
本章小结 103
第6章 场景与层 104
6.1 场景与层的关系 104
6.2 场景切换 104
6.2.1 场景切换相关函数 104
6.2.2 场景过渡动画 109
6.3 场景的生命周期 111
6.3.1 生命周期函数 111
6.3.2 多场景切换生命周期 114
本章小结 116
第7章 动作、特效和动画 117
7.1 动作 117
7.1.1 瞬时动作 118
7.1.2 间隔动作 123
7.1.3 组合动作 128
7.1.4 动作速度控制 133
7.1.5 函数调用 136
7.2 特效 139
7.2.1 网格动作 139
7.2.2 实例:特效演示 141
7.3 动画 143
7.3.1 帧动画 144
7.3.2 实例:帧动画的使用 144
本章小结 147
第8章 用户事件 148
8.1 事件处理机制 148
8.1.1 事件分发器 149
8.1.2 触摸事件 150
8.1.3 实例:单点触摸事件 152
8.1.4 实例:多点触摸事件 155
8.1.5 键盘事件 158
8.2 加速度计与加速度事件 159
8.2.1 加速度计 159
8.2.2 加速计事件 160
8.2.3 实例:运动的小球 160
本章小结 162
第二篇 进阶篇 165
第9章 游戏背景音乐与音效 165
9.1 Cocos2d-x Lua中音频文件 165
9.1.1 音频文件介绍 165
9.1.2 Cocos2d-x Lua跨平台音频支持 166
9.2 使用Audio Engine引擎 167
9.2.1 音频文件的预处理 167
9.2.2 播放背景音乐 168
9.2.3 停止播放背景音乐 170
9.3 实例:设置背景音乐与音效 172
9.3.1 GameScene场景实现 172
9.3.2 SettingScene场景实现 175
本章小结 178
第10章 粒子系统 179
10.1 问题的提出 179
10.2 粒子系统的基本概念 180
10.2.1 实例:打火机 180
10.2.2 粒子发射模式 181
10.2.3 粒子系统属性 183
10.3 Cocos2d-x内置粒子系统 185
10.3.1 内置粒子系统 185
10.3.2 实例:内置粒子系统 185
10.4 自定义粒子系统 189
10.4.1 代码创建 189
10.4.2 plist文件创建 191
本章小结 194
第11章 瓦片地图 195
11.1 地图的性能问题 195
11.2 Cocos2d-x Lua中瓦片地图API 197
11.3 实例:忍者无敌 199
11.3.1 设计地图 199
11.3.2 程序中加载地图 200
11.3.3 移动精灵 201
11.3.4 检测碰撞 203
11.3.5 滚动地图 207
本章小结 210
第12章 物理引擎 211
12.1 使用物理引擎 212
12.1.1 物理引擎核心概念 212
12.1.2 物理引擎与精灵关系 213
12.2 Cocos2d-x Lua中物理引擎 213
12.2.1 Cocos2d-x Lua物理引擎API 213
12.2.2 实例:HelloPhysicsWorld 217
12.2.3 实例:碰撞检测 220
12.2.4 实例:使用关节 224
本章小结 226
第三篇 数据与网络篇 229
第13章 数据持久化 229
13.1 使用FileUtils访问文件 229
13.1.1 Cocos2d-x Lua中的目录 229
13.1.2 实例:读取文件 230
13.1.3 实例:路径搜索 232
13.2 持久化概述 234
13.3 UserDefault数据持久化 234
13.3.1 UserDefaultAPI 235
13.3.2 实例:保存背景音乐和音效设置 236
13.4 属性列表数据持久化 241
13.4.1 属性列表概述 241
13.4.2 实例:访问根为字典列表结构的属性列表文件 241
13.4.3 实例:访问根为列表结构的属性列表文件 244
本章小结 247
第14章 基于HTTP的网络通信 248
14.1 网络结构 248
14.1.1 客户端服务器结构网络 248
14.1.2 点对点结构网络 248
14.2 HTTP与HTTPS协议 249
14.3 使用XMLHttpRequest对象开发客户端 250
14.3.1 使用XMLHttpRequest对象 250
14.3.2 实例:MyNotes 251
14.4 数据交换格式 256
14.5 JSON数据交换格式 258
14.5.1 文档结构 258
14.5.2 JSON解码与编码 259
14.5.3 实例:完善MyNotes 261
本章小结 265
第15章 Node.js与WebSocket网络通信 266
15.1 Node.js 266
15.1.1 Node.js安装 266
15.1.2 Node.js测试 267
15.2 使用WebSocket 269
15.2.1 使用Node.js开发WebSocket服务器端程序 269
15.2.2 Cocos2d-x Lua客户端 271
15.3 实例:WebSocket重构MyNotes 274
15.3.1 WebSocket服务器端开发 274
15.3.2 服务器端Node.js访问SQLite数据库 276
15.3.3 Cocos2d-x Lua客户端开发 279
本章小结 282
第四篇 优化篇 285
第16章 性能优化 285
16.1 合理使用缓存 285
16.1.1 场景与资源 285
16.1.2 缓存创建和清除的时机 287
16.2 图片与纹理优化 290
16.2.1 选择图片格式 290
16.2.2 拼图 292
16.2.3 纹理像素格式 293
16.2.4 纹理缓存异步加载 294
16.2.5 背景图片优化 297
16.3 声音优化 299
16.3.1 声音格式优化 299
16.3.2 声音预处理与清除 300
本章小结 300
第五篇 跨平台移植篇 303
第17章 移植到Android平台 303
17.1 搭建交叉编译和打包环境 303
17.1.1 Android SDK安装 306
17.1.2 管理Android SDK 307
17.1.3 管理Android开发模拟器 308
17.1.4 Android NDK安装 310
17.2 创建Cocos2d-x Lua工程 311
17.3 交叉编译 312
17.4 打包运行 314
17.5 移植问题汇总 315
17.5.1 Lua文件编译问题 315
17.5.2 横屏与竖屏设置问题 315
本章小结 316
第18章 移植到iOS平台 317
18.1 iOS开发环境搭建 317
18.1.1 Xcode安装和卸载 317
18.1.2 Xcode操作界面 320
18.2 创建Cocos2d-x Lua工程 321
18.3 编译与发布 322
18.4 移植问题汇总 323
18.4.1 iOS平台声音移植问题 323
18.4.2 使用PVR纹理格式 324
18.4.3 横屏与竖屏设置问题 326
18.5 多分辨率屏幕适配 327
18.5.1 问题的提出 327
18.5.2 Cocos2d-x Lua屏幕适配 328
18.5.3 分辨率策略 331
18.5.4 纹理图集资源适配 333
18.5.5 瓦片地图资源适配 335
本章小结 336
第六篇实战篇 339
第19章 使用Git管理程序代码版本 339
19.1 代码版本管理工具——Git 339
19.1.1 版本控制历史 339
19.1.2 术语和基本概念 340
19.1.3 Git环境配置 340
19.1.4 Git常用命令 341
19.2 代码托管服务——GitHub 344
19.2.1 创建和配置GitHub账号 344
19.2.2 创建代码库 347
19.2.3 删除代码库 348
19.2.4 派生代码库 348
19.2.5 GitHub协同开发 352
19.3 实例:Cocos2d-x Lua游戏项目协同开发 352
19.3.1 提交到GitHub代码库 353
19.3.2 克隆GitHub代码库 354
19.3.3 重新获得GitHub代码库 355
本章小结 356
第20章 Cocos2d-x Lua敏捷开发项目实战——迷失航线手机游戏 357
20.1 迷失航线游戏分析与设计 357
20.1.1 迷失航线故事背景 357
20.1.2 需求分析 357
20.1.3 原型设计 358
20.1.4 游戏脚本 359
20.2 任务1:游戏工程的创建与初始化 359
20.2.1 迭代1.1 :创建工程 359
20.2.2 迭代1.2 :添加资源文件 360
20.2.3 迭代1.3 :添加常量文件SystemConst.lua 362
20.2.4 迭代1.4 :多分辨率支持 365
20.2.5 迭代1.5 :发布到GitHub 367
20.3 任务2:创建Loading场景 367
20.3.1 迭代2.1 :添加场景和层 367
20.3.2 迭代2.2 :Loading动画 369
20.3.3 迭代2.3 :异步加载纹理缓存 370
20.4 任务3:创建Home场景 371
20.4.1 迭代3.1 :添加场景和层 371
20.4.2 迭代3.2 :添加菜单 373
20.5 任务4:创建设置场景 375
20.6 任务5:创建帮助场景 377
20.7 任务6:游戏场景实现 378
20.7.1 迭代6.1 :创建敌人精灵 378
20.7.2 迭代6.2 :创建玩家飞机精灵 383
20.7.3 迭代6.3 :创建炮弹精灵 385
20.7.4 迭代6.4 :初始化游戏场景 387
20.7.5 迭代6.5 :游戏场景菜单实现 392
20.7.6 迭代6.6 :玩家飞机发射炮弹 395
20.7.7 迭代6.7 :炮弹与敌人的碰撞检测 396
20.7.8 迭代6.8 :玩家飞机与敌人的碰撞检测 400
20.7.9 迭代6.9 :玩家飞机生命值显示 402
20.7.10 迭代6.1 0:显示玩家得分情况 403
20.8 任务7:游戏结束场景 403
本章小结 406
第21章 为迷失航线游戏添加广告 407
21.1 使用谷歌AdMob广告 407
21.1.1 注册AdMob帐号 407
21.1.2 管理AdMob广告 407
21.1.3 AdMob广告类型 411
21.1.4 下载谷歌AdMob Ads SDK 411
21.2 为迷失航线游戏Android平台添加AdMob广告 413
21.2.1 Coogle Play服务下载与配置 413
21.2.2 导入libcocos2dx类库工程到Eclipse 416
21.2.3 导入LostRoutes工程到Eclipse 416
21.2.4 编写AdMob相关代码 419
21.2.5 交叉编译、打包和运行 423
21.3 为迷失航线游戏iOS平台添加AdMob广告 423
21.3.1 Cocos2d-x引擎iOS平台下AdMob开发环境搭建 423
21.3.2 编写AdMob相关代码 427
本章小结 431
第22章 把迷失航线游戏发布放到Google play应用商店 432
22.1 谷歌Android应用商店Google play 432
22.2 还有“最后一公里” 432
22.2.1 Lua文件编译 432
22.2.2 添加图标 433
22.2.3 应用程序打包 434
22.3 发布产品 437
22.3.1 上传APK 438
22.3.2 填写商品详细信息 439
22.3.3 定价和发布范围 441
本章小结 443
第23章 把迷失航线游戏发布放到苹果的App Store 444
23.1 苹果的App Store 444
23.2 iOS设备测试 444
23.2.1 创建开发者证书 446
23.2.2 设备注册 451
23.2.3 创建App ID 452
23.2.4 创建配置概要文件 455
23.2.5 设备上运行 458
23.3 还有“最后一公里” 459
23.3.1 添加图标 459
23.3.2 添加启动界面 461
23.3.3 修改发布产品属性 462
23.3.4 为发布进行编译 463
23.3.5 应用打包 468
23.4 发布产品 469
23.4.1 创建应用及基本信息 469
23.4.2 应用定价信息 471
23.4.3 基本信息输入 472
23.4.4 上传应用前的准备 476
23.4.5 上传应用 478
23.5 常见审核不通过的原因 481
23.5.1 功能问题 481
23.5.2 用户界面问题 481
23.5.3 商业问题 481
23.5.4 不当内容 482
23.5.5 其他问题 482
本章小结 482