第1章 准备开始 1
1.1 本书学习路线图 1
1.2 使用实例代码 3
第一篇 基础篇 7
第2章 Lua语言基础 7
2.1 Lua开发环境搭建 7
2.1.1 安装LDT工具 7
2.1.2 HelloLua实例测试 11
2.2 标识符和保留字 15
2.2.1 标识符 15
2.2.2 保留字 16
2.3 常量和变量 16
2.3.1 常量 16
2.3.2 变量 16
2.3.3 命名规范 16
2.4 注释 17
2.5 Lua数据类型 18
2.5.1 数据类型 18
2.5.2 type函数 19
2.5.3 数据类型转换 19
2.6 运算符 20
2.6.1 算术运算符 20
2.6.2 关系运算符 22
2.6.3 逻辑运算符 23
2.6.4 运算优先级 24
2.7 控制语句 24
2.7.1 分支语句 24
2.7.2 循环语句 26
2.7.3 跳转语句 28
2.8 table类型 29
2.8.1 字典 29
2.8.2 数组 30
2.9 字符串类型 31
2.9.1 字符串截取 32
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章 Cocos2d-x Lua API与环境搭建 42
3.1 移动平台游戏引擎介绍 42
3.2 Cocos2d家谱 42
3.3 Cocos2d-x设计目标 43
3.4 搭建Cocos2d-x Lua API开发环境 44
3.4.1 安装Visual Studio开发工具 45
3.4.2 下载和使用Cocos2d-x Lua API官方案例 45
3.4.3 配置Cocos2d-x环境 47
3.4.4 使用API文档 50
本章小结 50
第4章 Hello Cocos2d-x 51
4.1 第一个Cocos2d-x Lua API游戏 51
4.1.1 创建工程 51
4.1.2 工程文件结构 52
4.1.3 重构HelloLua工程 52
4.1.4 运行HelloLua工程 54
4.1.5 调试HelloLua工程 56
4.2 Cocos2d-x核心概念 59
4.2.1 导演 59
4.2.2 场景 59
4.2.3 层 60
4.3 Node与Node层级架构 61
4.3.1 Node中重要的操作 61
4.3.2 Node中重要的属性 63
4.3.3 游戏循环与调度 65
4.4 Cocos2d-x坐标系 67
4.4.1 UI坐标 67
4.4.2 OpenGL坐标 67
4.4.3 世界坐标和模型坐标 68
本章小结 72
第5章 标签和菜单 73
5.1 游戏中的文字 73
5.2 使用标签 74
5.2.1 Label类 74
5.2.2 实例:使用系统字体和TTF字体 75
5.2.3 实例:使用位图字体 76
5.2.4 LabelAtlas类 78
5.3 使用菜单 79
5.3.1 文本菜单 80
5.3.2 精灵菜单和图片菜单 81
5.3.3 开关菜单 84
本章小结 85
第6章 精灵 86
6.1 Sprite精灵类 86
6.1.1 创建Sprite精灵对象 86
6.1.2 实例:使用纹理对象创建Sprite对象 87
6.2 精灵的性能优化 88
6.2.1 使用纹理图集 89
6.2.2 使用精灵帧缓存 91
本章小结 93
第7章 场景与层 94
7.1 场景与层的关系 94
7.2 场景切换 94
7.2.1 场景切换相关函数 94
7.2.2 场景过渡动画 99
7.3 场景的生命周期 101
7.3.1 生命周期函数 101
7.3.2 多场景切换生命周期 103
本章小结 105
第8章 动作、特效和动画 106
8.1 动作 106
8.1.1 瞬时动作 107
8.1.2 间隔动作 111
8.1.3 组合动作 116
8.1.4 动作速度控制 120
8.1.5 函数调用 123
8.2 特效 126
8.2.1 网格动作 127
8.2.2 实例:特效演示 127
8.3 动画 129
8.3.1 帧动画 129
8.3.2 实例:帧动画使用 129
本章小结 132
第9章 用户事件 133
9.1 事件处理机制 133
9.1.1 事件分发器 134
9.1.2 触摸事件 135
9.1.3 实例:单点触摸事件 137
9.1.4 实例:多点触摸事件 140
9.1.5 键盘事件 142
9.2 加速度计与加速度事件 144
9.2.1 加速度计 144
9.2.2 加速度计事件 144
9.2.3 实例:运动的小球 145
本章小结 146
第二篇 进阶篇 149
第10章 游戏背景音乐与音效 149
10.1 Cocos2d-x Lua API中音频文件 149
10.1.1 音频文件介绍 149
10.1.2 Cocos2d-x跨平台音频支持 150
10.2 使用AudioEngine引擎 151
10.2.1 音频文件的预处理 151
10.2.2 播放背景音乐 152
10.2.3 停止播放背景音乐 154
10.3 实例:设置背景音乐与音效 156
10.3.1 GameScene场景实现 156
10.3.2 SettingScene场景实现 158
本章小结 161
第11章 粒子系统 162
11.1 问题的提出 162
11.2 粒子系统基本概念 163
11.2.1 实例:打火机 163
11.2.2 粒子发射模式 165
11.2.3 粒子系统属性 165
11.3 内置粒子系统 167
11.3.1 内置粒子系统 167
11.3.2 实例:内置粒子系统 168
11.4 自定义粒子系统 170
11.4.1 代码创建 171
11.4.2 plist文件创建 173
本章小结 176
第12章 瓦片地图 177
12.1 地图性能问题 177
12.2 瓦片地图API 178
12.3 实例:忍者无敌 180
12.3.1 设计地图 180
12.3.2 程序中加载地图 181
12.3.3 移动精灵 182
12.3.4 检测碰撞 184
12.3.5 滚动地图 187
本章小结 190
第13章 物理引擎 191
13.1 使用物理引擎 192
13.1.1 物理引擎核心概念 192
13.1.2 物理引擎与精灵关系 193
13.2 Cocos2d-x中物理引擎 193
13.2.1 Cocos2d-x物理引擎Lua API 193
13.2.2 实例:HelloPhysicsWorld 197
13.2.3 实例:接触与碰撞检测 200
13.2.4 实例:使用关节 203
本章小结 205
第14章 Cocos2d-x GUI控件 206
14.1 按钮 207
14.2 ImageView 209
14.3 文本控件 210
14.3.1 Text 210
14.3.2 TextBMFont 210
14.3.3 Rich Text 211
14.4 RadioButton和RadioButtonGroup 213
14.5 CheckBox 215
14.6 LoadingBar 217
14.7 滑块控件 218
本章小结 220
第15章 Cocos2d-x中的3D特性 221
15.1 一些3D概念 221
15.1.1 网格和模型 221
15.1.2 相机 221
15.1.3 投影 221
15.2 使用3D精灵 223
15.2.1 创建Sprite3D对象 223
15.2.2 实例:使用模型和纹理Sprite3D对象 223
15.3 3D模型文件格式 226
15.4 使用相机 227
15.4.1 创建和设置Camera对象 227
15.4.2 实例:使用Camera对象 227
15.5 3D粒子系统 229
15.5.1 创建PUParticleSystem3D对象 229
15.5.2 实例:创建Particle Universe 3D粒子 229
本章小结 231
第三篇 数据与网络篇 235
第16章 文件访问操作和数据持久化 235
16.1 使用FileUtils访问文件 235
16.1.1 Cocos2d-x Lua API中的目录 235
16.1.2 实例:读取文件 236
16.1.3 实例:路径搜索 238
16.2 持久化概述 239
16.3 UserDefault数据持久化 240
16.3.1 UserDefault API 240
16.3.2 实例:保存背景音乐和音效设置 241
16.4 属性列表数据持久化 245
16.4.1 属性列表概述 245
16.4.2 实例:访问根为字典结构的属性列表文件 246
16.4.3 实例:访问根为列表结构的属性列表文件 249
本章小结 251
第17章 基于HTTP网络通信 252
17.1 网络结构 252
17.1.1 客户端服务器结构网络 252
17.1.2 点对点结构网络 253
17.2 HTTP与HTTPS协议 253
17.3 使用XMLHttpRequest对象开发客户端 254
17.3.1 使用XMLHttpRequest对象 254
17.3.2 实例:MyNotes 255
17.4 数据交换格式 259
17.5 JSON数据交换格式 261
17.5.1 文档结构 261
17.5.2 JSON解码与编码 262
17.5.3 实例:完善MyNotes 264
本章小结 267
第18章 Node.js与WebSocket网络通信 268
18.1 Node.js 268
18.1.1 Node.js安装 268
18.1.2 Node.js测试 269
18.2 使用WebSocket 270
18.2.1 使用Node.js开发WebSocket服务器端程序 271
18.2.2 Cocos2d-x Lua API客户端 272
本章小结 275
第四篇 优化篇 279
第19章 性能优化 279
19.1 合理使用缓存 279
19.1.1 场景与资源 279
19.1.2 缓存创建和清除时机 280
19.2 图片与纹理优化 284
19.2.1 选择图片格式 284
19.2.2 拼图 285
19.2.3 纹理像素格式 286
19.2.4 纹理缓存异步加载 287
19.2.5 背景图片优化 290
19.3 声音优化 291
19.3.1 声音格式优化 291
19.3.2 声音预处理与清除 292
本章小结 293
第五篇 多平台移植篇 297
第20章 移植到Android平台 297
20.1 搭建交叉编译和打包环境 297
20.1.1 Android SDK安装 300
20.1.2 管理Android SDK 301
20.1.3 管理Android开发模拟器 302
20.1.4 Android NDK安装 304
20.1.5 设置环境变量 304
20.2 交叉编译、打包和运行 306
20.2.1 使用cocos命令行工具 306
20.2.2 Android.mk编译文件 306
20.3 移植问题汇总 309
20.3.1 Lua文件编译问题 309
20.3.2 横屏与竖屏设置问题 309
本章小结 310
第21章 移植到iOS平台 311
21.1 iOS开发环境搭建 311
21.1.1 Xcode安装和卸载 311
21.1.2 Xcode操作界面 313
21.2 编译与运行 315
21.3 移植问题汇总 317
21.3.1 iOS平台声音移植问题 317
21.3.2 使用PVR纹理格式 319
21.3.3 横屏与竖屏设置问题 320
21.4 多分辨率屏幕适配 320
21.4.1 问题的提出 321
21.4.2 Cocos2d-x Lua API屏幕适配 321
21.4.3 分辨率策略 324
21.4.4 纹理图集资源适配 326
21.4.5 瓦片地图资源适配 328
本章小结 328
第六篇 实战篇 331
第22章 使用Git管理程序代码版本 331
22.1 代码版本管理工具——Git 331
22.1.1 版本控制历史 331
22.1.2 术语和基本概念 332
22.1.3 Git环境配置 332
22.1.4 Git常用命令 333
22.2 代码托管服务——GitHub 335
22.2.1 创建和配置GitHub账号 336
22.2.2 创建代码库 339
22.2.3 删除代码库 341
22.2.4 派生代码库 341
22.2.5 GitHub协同开发 344
22.3 实例:Cocos2d-x游戏项目协同开发 345
22.3.1 提交到GitHub代码库 345
22.3.2 克隆GitHub代码库 348
22.3.3 重新获得GitHub代码库 348
本章小结 349
第23章 Cocos2d-x Lua API敏捷开发项目实战——迷失航线手机游戏 350
23.1 迷失航线游戏分析与设计 350
23.1.1 迷失航线故事背景 350
23.1.2 需求分析 350
23.1.3 原型设计 351
23.1.4 游戏脚本 352
23.2 任务1:游戏工程的创建与初始化 353
23.2.1 迭代1.1:创建工程 353
23.2.2 迭代1.2:添加资源文件 353
23.2.3 迭代1.3:添加常量文件SystemConst.lua 355
23.2.4 迭代1.4:多分辨率支持 357
23.2.5 迭代1.5:发布到GitHub 359
23.3 任务2:创建Loading场景 359
23.3.1 迭代2.1:添加场景和层 359
23.3.2 迭代2.2:Loading动画 361
23.3.3 迭代2.3:异步加载纹理缓存 362
23.4 任务3:创建Home场景 363
23.4.1 迭代3.1:添加场景和层 363
23.4.2 迭代3.2:添加菜单 364
23.5 任务4:创建设置场景 366
23.6 任务5:创建帮助场景 368
23.7 任务6:游戏场景实现 368
23.7.1 迭代6.1:创建敌人精灵 369
23.7.2 迭代6.2:创建玩家飞机精灵 373
23.7.3 迭代6.3:创建炮弹精灵 375
23.7.4 迭代6.4:初始化游戏场景 377
23.7.5 迭代6.5:游戏场景菜单实现 381
23.7.6 迭代6.6:玩家飞机发射炮弹 384
23.7.7 迭代6.7:炮弹与敌人的接触检测 385
23.7.8 迭代6.8:玩家飞机与敌人的接触检测 388
23.7.9 迭代6.9:玩家飞机生命值显示 390
23.7.10 迭代6.10:显示玩家得分情况 390
23.8 任务7:游戏结束场景 391
本章小结 394
第24章 把迷失航线游戏发布到Google play应用商店 395
24.1 谷歌Android应用商店Google play 395
24.2 “最后一公里” 396
24.2.1 Lua文件编译 396
24.2.2 添加图标 397
24.2.3 生成数字签名文件 397
24.2.4 应用程序打包 398
24.3 发布产品 399
24.3.1 上传APK 399
24.3.2 填写商品详细信息 401
24.3.3 定价和发布范围 403
本章小结 405
第25章 把迷失航线游戏发布到苹果App Store应用商店 406
25.1 苹果的App Store 406
25.2 “最后一公里” 408
25.2.1 添加图标 408
25.2.2 添加启动界面 409
25.2.3 修改发布产品属性 413
25.3 iOS设备测试 415
25.3.1 Xcode设置 415
25.3.2 设备设置 417
25.4 为发布进行编译 419
25.4.1 创建开发者证书 419
25.4.2 创建App ID 425
25.4.3 创建描述文件 427
25.4.4 发布编译 431
25.5 发布上架 432
25.5.1 创建应用 433
25.5.2 应用定价 435
25.5.3 基本信息输入 436
25.5.4 上传应用 440
25.5.5 提交审核 442
25.6 常见审核通不过的原因 444
25.6.1 功能问题 444
25.6.2 用户界面问题 444
25.6.3 商业问题 444
25.6.4 不当内容 445
25.6.5 其他问题 445
本章小结 445