第1篇 入门篇 2
第1章 Cocos2d-x启航 2
1.1 特点、内容结构以及建议 2
1.2 Cocos2d-x简介 3
1.3 从2.x到3.x 4
1.4 约定 4
1.5 启航 5
1.5.1 Windows 6
1.5.2 Mac 10
1.5.3 Linux 10
1.5.4 Cocos引擎 11
第2章 使用Cocos2d-x 13
2.1 Cocos2d-x世界 13
2.1.1 显示图片 14
2.1.2 执行逻辑 14
2.1.3 获取输入 14
2.2 分析HelloCpp 15
2.3 小结 18
第3章 低级错误大全 20
3.1 create和retain-release 20
3.2 继承对象的create 21
3.3 多个对象执行同一个Action 21
3.4 忘记调用父类的虚函数 21
3.5 隐藏在代码中的神秘杀手,节点中的节点操作 22
3.6 普通对象和new出来的对象 22
3.7 不要忘记init 23
3.8 addChild失败 24
3.9 在onEnter中调用parent的addChild 24
3.10 忘记移除 25
3.11 重载draw注意事项 25
3.12 关于引用 25
3.13 关于命名空间 25
3.14 关于类之间的互相包含 26
3.15 关于平台相关的API 26
3.16 关于update中写逻辑 26
3.17 关于调试 27
3.18 小结 29
第4章 图解指针 30
4.1 指针与内存 30
4.2指针操作 32
4.3 指针与数组 32
4.4 函数指针 33
4.5 野指针和内存泄漏 34
第5章 C++11简介 36
5.1 初始化列表 36
5.2 类型推导 37
5.3 范围推导 37
5.4 智能指针和空指针 37
5.5 Lambda特性 38
5.6 变长参数模板 39
5.7 右值引用 41
5.7.1 分辨左值和右值 41
5.7.2 移动语义 42
5.7.3 完美转发 45
5.8 显式虚函数重载 46
5.9 小结 47
第2篇 基础框架篇 50
第6章 节点系统 50
6.1 节点的表现 50
6.1.1 位置 50
6.1.2 旋转和倾斜 51
6.1.3 缩放 52
6.1.4 锚点Anchor 52
6.1.5 渲染顺序ZOrder 53
6.1.6 尺寸 54
6.1.7 懒惰计算 54
6.1.8 其他属性介绍 55
6.2 节点的使用 55
6.2.1 使用Action 56
6.2.2 使用Schedule 56
6.3 节点和节点 57
6.3.1 添加子节点 58
6.3.2 删除节点 59
6.3.3 节点查询 60
6.3.4 节点之间的空间变换 61
6.4 节点树的渲染 63
6.5 节点与组件 64
第7章 内存管理 66
7.1 内存基础知识 66
7.1.1 内存区域的划分 66
7.1.2 new和malloc的区别 67
7.1.3 堆和栈的区别 68
7.1.4 代码分析 68
7.2 内存泄露、野指针和跨动态链接库的内存使用 69
7.2.1 内存泄露 69
7.2.2 野指针 69
7.2.3 动态链接库的内存 70
7.3 Cocos2d-x的引用计数 70
7.4 容器对象的内存管理 72
7.5 复制对象 73
7.6 内存优化 74
第8章 场景和层 77
8.1 Scene场景 77
8.1.1 场景和Director 77
8.1.2 切换场景与引用计数 79
8.1.3 场景切换特效 81
8.2 Layer层 85
8.2.1 Layer层详解 86
8.2.2 LayerColor颜色层详解 86
8.2.3 LayerGradient渐变层详解 87
8.2.4 LayerMultiplex复合层详解 88
第9章 精灵详解 89
9.1 Sprite详解 89
9.1.1 使用Sprite 89
9.1.2 创建Sprite 89
9.1.3 初始化流程 90
9.1.4 设置纹理 91
9.1.5 渲染 92
9.2 SpriteFrame和SpriteFrameCache详解 92
9.2.1 SpriteFrame详解 92
9.2.2 SpriteFrameCache详解 93
9.2.3 SpriteFrameCache加载流程 93
9.3 SpriteBatchNode详解 94
9.3.1 创建SpriteBatchNode 95
9.3.2 添加与删除SpriteBatchNode 95
9.3.3 使用SpriteBatchNode 95
第10章 动作系统 98
10.1 使用Action 98
10.2 Action整体框架 99
10.2.1 Action类 100
10.2.2 ActionManager类 100
10.3 Action运行流程 101
10.3.1 瞬时动作ActionInstant 103
10.3.2 持续动作ActionInterval 103
10.3.3 组合动作 104
10.3.4 函数动作 104
10.3.5 时间动作 105
10.4 Action的分类 105
10.4.1 瞬间动作 107
10.4.2 持续动作 107
10.4.3 组合动作 108
10.4.4 变速动作 108
10.4.5 扩展动作 109
10.4.6 特效动作 111
第11章 播放动画 119
11.1 播放帧动画 119
11.2 创建Animation 121
11.2.1 基于Plist文件自动创建Animation 121
11.2.2 解析TexturePacker的Plist文件 123
11.2.3 使用AnimationCache 125
11.2.4 经验分享 126
11.3 帧动画框架剖析 127
11.3.1 帧动画系统结构 127
11.3.2 Animate运行流程 128
11.4 进度动画 129
11.4.1 半径扫描效果 130
11.4.2 水平扫描效果 131
11.4.3 垂直扫描效果 132
11.4.4 四边扩散/收缩效果 133
第12章 纹理详解 135
12.1 在Cocos2d-x中使用纹理 135
12.1.1 Texture的初始化 135
12.1.2 纹理和Sprite的关系 136
12.1.3 POT和NPOT 136
12.1.4 纹理混合Blend 137
12.1.5 Alpha预乘 138
12.1.6 纹理参数 139
12.1.7 纹理过滤Texture Filter 140
12.1.8 纹理环绕 142
12.1.9 Mip贴图 143
12.1.10 渲染纹理 145
12.2 管理纹理 146
12.2.1 使用TextureCache管理纹理 146
12.2.2 使用TextureCache加载纹理 148
12.2.3 异步加载纹理 152
12.3 纹理格式 153
12.4 纹理压缩 156
12.4.1 纹理压缩格式对比 157
12.4.2 在Cocos2d-x中使用纹理压缩 158
12.4.3 使ETC1支持透明 159
第13章 显示文字 164
13.1 使用Label 164
13.1.1 Labe1TTF详解 164
13.1.2 LabelBMFont详解 166
13.1.3 LabelAtlas详解 167
13.1.4 Label详解 167
13.2 新Label框架剖析 171
13.2.1 整体框架 171
13.2.2 运行流程 173
13.2.3 STRING_ TEXTURE类型Label的运行流程 173
13.2.4 使用FontAtlas的Label的运行流程 174
13.2.5 FontAtlas的创建流程 174
13.3 关于中文显示 176
13.3.1 使用中文配置文件csv/xml/plist 177
13.3.2 将代码文件转为UTF-8编码 178
13.3.3 使用iconv转换中文 179
13.4 造字工具 180
13.4.1 使用BMFont工具 180
13.4.2 使用Hiero工具 182
第14章 运行机制 185
14.1 Cocos2d-x内部运行流程 185
14.1.1 Application详解 185
14.1.2 Director详解 187
14.2 Cocos2d-x在Windows下的运行流程 188
14.3 Cocos2d-x在Android下的运行流程 190
14.3.1 启动游戏 190
14.3.2 游戏事件与主循环 192
14.4 Cocos2d-x在iOS下的运行流程 194
14.4.1 启动游戏 195
14.4.2 主循环 197
第15章 渲染机制 198
15.1 渲染树VS渲染命令 198
15.1.1 渲染树 198
15.1.2 渲染命令 199
15.2 Cocos2d-x 3.0渲染框架 200
15.3 渲染命令详解 202
第16章 消息机制 206
16.1 事件通知 206
16.2 NotificationCenter和EventDispatcher 207
16.2.1 使用EventDispatcher 208
16.2.2 相关接口 208
16.2.3 其他监听者 210
16.2.4 使用NotificationCenter 210
16.3 内部流程以及注意事项 210
16.3.1 消息的通知流程 210
16.3.2 消息的注册流程 211
16.3.3 消息的注销流程 212
16.4 小结 212
第17章 Schedule详解 213
17.1 Schedule接口简介 213
17.1.1 回调函数 213
17.1.2 注册回调 214
17.1.3 注销回调 215
17.1.4 时间缩放、暂停、恢复 215
17.1.5 优先级 216
17.1.6 线程安全 216
17.2 Schedule整体结构与运行流程 216
17.2.1 整体结构 216
17.2.2 外部流程 217
17.2.3 更新顺序 218
17.2.4 注册与注销 218
17.3 Schedule使用过程中的问题 219
第3篇UI与交互篇 222
第18章 触摸输入 222
18.1 如何监听触摸消息 222
18.1.1 监听触摸消息 222
18.1.2 触摸监听者 222
18.1.3 触摸消息 223
18.1.4 注册监听 224
18.2 触摸输入运行流程 224
18.3 判断点击 226
18.4 多点触摸 228
18.5 点击穿透 229
第19章 文本输入 231
19.1 TextFieldTTF简介 231
19.2 使用TextFieldTTF 232
19.3 扩展TextFieldTTF 232
19.4 详解IME 234
第20章 按钮与重力感应输入 236
20.1 重力感应 236
20.1.1 摇一摇 238
20.1.2 多角度倾斜 238
20.2 物理按键 239
第21章 Menu和Menultem详解 241
21.1 使用Menu和MenuItem 241
21.2 结构框架与执行流程 241
21.2.1 Menu详解 242
21.2.2 MenuItem详解 243
21.2.3 执行流程 243
21.3 MenuItem详解 244
21.3.1 MenuItemLabel详解 244
21.3.2 MenuItemAtlasFont详解 244
21.3.3 MenuItemFont详解 245
21.3.4 MenuItemSprite详解 245
21.3.5 MenuItemImage详解 245
21.3.6 MenuItemToggle详解 246
21.4 实现TabView 246
第22章 GUI框架概述 248
22.1 GUI框架简介 248
22.1.1 命名空间与头文件 249
22.1.2 工具方法 249
22.1.3 九宫缩放 249
22.2 UIWidget详解 250
22.2.1 保护节点ProtectNode 250
22.2.2 高亮相关 251
22.2.3 位置布局相关 251
22.2.4 触摸相关 252
22.2.5 控件焦点 254
22.2.6 实现自己的Widget 255
22.3 UILayout详解 255
22.3.1 Layout背景 256
22.3.2 裁剪 256
22.3.3 焦点查找 257
22.3.4 Layout布局 257
第23章 GUI框架之功能控件 259
23.1 UIButton控件 259
23.1.1 创建Button 259
23.1.2 加载图片 259
23.1.3 设置九宫 260
23.1.4 设置文字 260
23.2 UICheckBox控件 261
23.2.1 创建CheckBox 261
23.2.2 加载图片 261
23.2.3 选择 262
23.3 UIImageView控件 262
23.3.1 创建ImageView 262
23.3.2 纹理与九宫 262
23.4 UILoadingBar控件 263
23.4.1 创建LoadingBar 263
23.4.2 纹理与九宫 263
23.4.3 方向与进度 263
23.5 UISlider控件 263
23.5.1 创建与加载纹理 264
23.5.2 九宫 264
23.5.3 进度与回调 265
第24章 GUI框架之文本输入和显示 266
24.1 UIText、 UITextAtlas和UITextBMFont文本显示控件 266
24.2 UIRichText文本显示控件 267
24.3 UITextField文本输入控件 270
24.3.1 创建TextField 270
24.3.2 触摸相关 270
24.3.3 输入密码 271
24.3.4 设置、获取文本 271
24.3.5 输入回调 272
24.3.6 自动换行与对齐 272
24.4 UIEditBox文本输入控件 272
24.4.1 创建EditBox 273
24.2.2 文本与输入提示文本 274
24.4.3 输入委托 274
24.4.4 输入模式 274
24.4.5 标签与限制 275
第25章 GUI框架之容器控件 276
25.1 UIScrollView容器控件 276
25.1.1 拖曳滚动 276
25.1.2 InnerContainer详解 277
25.2 UIListView容器控件 277
25.3 UIPageView容器控件 279
25.4 UIWebView容器控件 280
25.4.1 加载页面 280
25.4.2 操作页面 281
25.4.3 页面回调 281
第4篇CocoStudio工具链篇 284
第26章 CocoStudio概述 284
26.1 CocoStudio是什么 284
26.2 CocoStudio的设计目标 285
26.3 使用CocoStudio 285
26.3.1 使用UI编辑器 286
26.3.2 使用动画编辑器 286
26.3.3 使用数据编辑器 287
26.3.4 使用场景编辑器 287
26.3.5 使用CocoStudio 2.x 288
26.4 管理资源 288
26.5 版本对应 289
第27章 CocoStudio UI编辑器 291
27.1 使用UI编辑器 291
27.2 编写代码 295
27.2.1 加载UI 295
27.2.2 UI动画 295
27.2.3 初始化UI 296
27.2.4 更新UI 297
27.3 分辨率适配 299
27.4 扩展UI编辑器 302
第28章 CocoStudio场景编辑器 303
28.1 使用场景编辑器 303
28.2 组件系统 305
28.3 触发器 308
28.3.1 触发器的使用 308
28.3.2 触发器的代码框架以及运作流程 310
28.3.3 触发器的扩展 310
28.4 加载场景 315
第29章 CocoStudio动画编辑器 316
29.1 骨骼动画的命名规范 316
29.1.1 骨骼的命名 316
29.1.2 动画的命名 317
29.1.3 帧事件的命名 317
29.1.4 整个骨骼动画对象的命名 317
29.2 骨骼动画框架和运行流程 317
29.2.1 骨骼动画框架 317
29.2.2 运行流程 319
29.2.3 初始化 319
29.2.4 运行和更新 320
29.3 使用动画编辑器 321
29.4 编写代码 326
29.4.1 加载骨骼资源 326
29.4.2 创建和播放骨骼动画 327
29.4.3 监听事件 327
29.4.4 动态挂载骨骼 328
29.4.5 换装功能 328
29.4.6 骨骼动画的衔接 329
29.4.7 骨骼动画的渲染优化 330
29.5 骨骼动画的碰撞检测 330
29.5.1 直接矩形检测 330
29.5.2 ColliderDetector手动计算碰撞检测 331
29.5.3 ColliderDetector使用Box2d碰撞检测 332
29.5.4 ColliderDetector的运行机制和结构 334
第30章 CocoStudio 2.x编辑器 338
30.1 使用Cocos引擎 338
30.2 使用CocoStudio 2.x 339
30.2.1 CocoStudio 2.x界面介绍 339
30.2.2 使用CocoStudio 2.x 341
30.2.3 在程序中加载.csb文件 342
30.3 动画功能 342
30.3.1 在CocoStudio中编辑动画 342
30.3.2 在程序中播放动画 344
30.4 分辨率适配 345
30.5 高级特性 347
30.6 其他特性 353
30.7 在Windows下调试引擎 356
第31章 使用CocosBuilder 358
31.1 CocosBuilder简介 358
31.1.1 CocosBuilder界面简介 358
31.1.2 工作流程 358
31.1.3 常见问题 359
31.2 编写代码加载ccbi 361
31.2.1 创建普通节点 362
31.2.2 绑定到类 362
31.2.3 绑定回调函数 363
31.2.4 绑定成员变量 364
31.2.5 初始化流程 364
31.2.6 在Cocos2d-x 3.x版本中使用 365
31.3 播放动画 365
31.3.1 编辑动画 365
31.3.2 编写代码 367