《我所理解的Cocos2d-x》pdf

下载地址:网盘下载

内容提要

编辑

《我所理解的Cocos2d-x》针对最新的 Cocos2d-x 3.x版本,介绍了Coco2d-x游戏引擎的基本架构、渲染机制,以及各个子模块的功能和原理,并结合OpenGL ES图形渲染管线,深入探讨了游戏开发中涉及的相关图形学的知识,内容包括:Cocos2d-x的基本架构及渲染机制、纹理相关的知识、OpenGL ES 2.0渲染管线、计算机字体的绘制、多分辨率支持、事件分发、碰撞与物理引擎、游戏对象模型架构、Genius-x开源框架、脚本在游戏引擎中的架构等。《我所理解的Cocos2d-x》偏重讲解每个知识模块的概念及原理,使读者能够透过现象看到其背后的工作机制,所以本书在内容组织上并不是围绕Cocos2d-x的接口使用来展开,而是按照通用游戏引擎架构及图形学的内容进行组织。

目录

编辑

第1章 全新的Cocos2d-x 3.0 1

1.1 Cocos2d-x 3.0的历史意义 1

1.1.1 回归C++风格 2

1.1.2 更灵活的渲染架构 2

1.1.3 更自由的发展 2

1.2 Cocos2d-x 3.0的新特性 3

1.2.1 使用C++风格 3

1.2.2 跨平台的Label 6

1.2.3 新的渲染系统 6

1.2.4 统一的消息分发 8

1.2.5 物理引擎集成 9

1.2.6 新的数据结构 10

1.2.7 其他 14

1.3 Cocos2d-x引擎展望 15

1.3.1 3D 16

1.3.2 Cocos Code IDE 16

1.4 本章小结 17

第2章 Cocos2d-x架构一瞥 19

2.1 Cocos2d-x引擎系统总览 19

2.2 Cocos2d-x内存管理机制 21

2.2.1 C++显式堆内存管理 21

2.2.2 C++ 11中的智能指针 22

2.2.3 为什么不使用智能指针 23

2.2.4 垃圾回收机制 23

2.2.5 Cocos2d-x内存管理机制 24

2.2.6 Cocos2d-x中的智能指针 29

2.2.7 怎样进行内存管理 35

2.3 UI树及运行时游戏对象 35

2.3.1 位置与变换 35

2.3.2 坐标系 36

2.3.3 UI树 39

2.3.4 UI元素与内存管理 45

2.4 应用程序架构 46

2.4.1 游戏生命周期 46

2.4.2 窗口尺寸 48

2.4.3 场景管理 48

2.4.4 游戏循环 49

2.5 实时更新游戏对象 52

2.5.1 帧率 52

2.5.2 Scheduler 53

2.5.3 时间线 54

2.5.4 逻辑更新优先级 55

2.5.5 性能问题 56

2.6 Cocos2d-x的主线程 56

2.6.1 在主线程中执行异步处理 57

2.6.2 纹理的异步加载 58

2.6.3 异步处理的单元测试 60

2.7 本章小结 60

第3章 OpenGL ES 2.0概览 62

3.1 图形处理器简介 62

3.2 什么是OpenGL ES 63

3.3 OpenGL ES 2.0渲染管线 64

3.3.1 顶点数组 65

3.3.2 顶点着色器 66

3.3.3 图元装配 66

3.3.4 光栅化 69

3.3.5 片段着色器 70

3.3.6 片段测试 70

3.4 渲染管线中的并行计算 71

3.5 构建高性能的渲染引擎 72

3.6 帧缓冲 73

3.7 本章小结 74

第4章 全新的绘制系统 76

4.1 新绘制系统的特点 76

4.2 绘制系统概览 77

4.3 RenderCommand 79

4.4 RenderQueue 80

4.5 GroupCommand 81

4.6 Render 84

4.6.1 RenderCommand的排序 84

4.6.2 QuadCommand 85

4.7 元素的可见性 87

4.8 绘制的时机 89

4.9 示例:自定义RenderCommand 91

4.10 本章小结 95

第5章 纹理 96

5.1 光栅化 96

5.1.1 多重采样 97

5.1.2 纹理坐标 98

5.2 像素矩形 99

5.2.1 像素存储模式 99

5.2.2 纹理数据的传输 99

5.2.3 解包 100

5.3 客户端图像格式 103

5.3.1 纹理格式的对应关系 104

5.3.2 图像数据格式转换 105

5.4 纹理对象和加载纹理 107

5.5 纹理单元与多重纹理 109

5.6 纹理缩放 110

5.6.1 纹理缩小 110

5.6.2 纹理放大 111

5.6.3 在Cocos2d-x中设置过滤模式 112

5.7 多级纹理 113

5.7.1 多级纹理过滤模式 113

5.7.2 多级纹理的上传 114

5.7.3 多级纹理的生成 115

5.8 纹理压缩 116

5.8.1 压缩纹理的特点 116

5.8.2 压缩纹理的实现 117

5.8.3 在Cocos2d-x中使用压缩纹理 118

5.8.4 PVRTC和PVRTC2 120

5.8.5 ETC 122

5.8.6 针对不同设备使用不同的压缩纹理 123

5.9 纹理缓存管理 123

5.9.1 纹理的生命周期 124

5.9.2 用TextureCache来管理纹理 125

5.9.3 场景过渡中的资源管理 127

5.9.4 Android下的纹理恢复处理 130

5.10 纹理所占内存的计算 131

5.11 使用纹理最佳实践 133

5.11.1 硬件层面 133

5.11.2 程序层面 133

5.11.3 资源层面 134

5.12 本章小结 135

第6章 精灵 137

6.1 用Sprite绘制一个矩形区域 137

6.1.1 V3F_C4B_T2F_Quad结构体 138

6.1.2 使用QuadCommand进行绘制 139

6.1.3 将Sprite作为子元素 140

6.2 Sprite的绘制属性 140

6.2.1 颜色混合 141

6.2.2 颜色叠加 144

6.3 Alpha预乘 148

6.4 精灵表 150

6.5 精灵动画 152

6.6 批绘制还是自动批绘制 154

6.6.1 SpriteBatchNode 154

6.6.2 TextureAtlas 156

6.6.3 SpriteBatchNode的特点和限制 157

6.7 部分拉伸:九宫格 157

6.8 本章小结 158

第7章 OpenGL ES着色语言 161

7.1 概览 161

7.2 基础类型 162

7.2.1 空类型 163

7.2.2 布尔类型 163

7.2.3 整型 163

7.2.4 浮点型 163

7.2.5 矢量 164

7.2.6 矩阵 164

7.2.7 采样器 164

7.2.8 结构体 165

7.2.9 数组 165

7.3 存储限定符 166

7.3.1 默认限定符 167

7.3.2 常量限定符 167

7.3.3 属性限定符 167

7.3.4 全局限定符 168

7.3.5 易变量限定符 169

7.4 构造器 170

7.4.1 标量的转换构造 170

7.4.2 矢量和矩阵构造器 171

7.4.3 结构体构造器 172

7.5 矢量的分量 173

7.6 矩阵的分量 174

7.7 结构体和成员 174

7.8 矢量和矩阵操作符 175

7.9 本章小结 176

第8章 OpenGL ES着色程序 177

8.1 顶点和顶点数组 177

8.1.1 图元与顶点 178

8.1.2 顶点属性状态 178

8.1.3 顶点数组 180

8.2 顶点缓冲对象 185

8.2.1 顶点数组缓冲对象 187

8.2.2 索引数组缓冲对象 188

8.2.3 使用VAO缓存顶点数组状态 190

8.3 着色器程序 192

8.3.1 着色器程序字符串 192

8.3.2 着色器的加载和编译 193

8.3.3 着色器程序对象 195

8.4 Cocos2d-x着色器子系统 196

8.4.1 GLProgram与Node之间的关系 197

8.4.2 GLProgramState 199

8.4.3 着色器程序的使用过程 202

8.4.4 GLProgramState的管理 204

8.4.5 GLProgramState的限制 205

8.5 顶点着色器 206

8.5.1 输入参数 206

8.5.2 顶点坐标输出参数 207

8.5.3 易变量输出参数 208

8.6 片段着色器 209

8.6.1 输入参数 210

8.6.2 纹理采样 210

8.6.3 输出参数 211

8.7 着色器编辑工具 211

8.8 示例 213

8.8.1 使用ETC压缩纹理 214

8.8.2 动态设置着色器参数 217

8.9 着色器程序最佳实践 220

8.10 本章小结 220

第9章 帧缓冲 223

9.1 GroupCommand 223

9.1.1 使用GroupCommand的流程 224

9.1.2 GroupCommand的限制 225

9.2 帧缓冲 226

9.2.1 绑定和管理帧缓冲 227

9.2.2 将图像附加到帧缓冲 228

9.2.3 渲染缓冲对象 228

9.2.4 将Renderbuffer附加到帧缓冲 230

9.2.5 将Texture附加到帧缓冲 230

9.2.6 帧缓冲完成状态 231

9.3 RenderTexture 234

9.3.1 RenderTexture的初始化 235

9.3.2 RenderTexture的绘制 238

9.3.3 ReadPixels 239

9.3.4 RenderTexture的限制及用途 240

9.4 本章小结 240

第10章 片段操作 242

10.1 片段操作简述 242

10.2 逻辑缓冲区 243

10.2.1 位平面 244

10.2.2 按位计算 245

10.3 片段测试 248

10.3.1 模板测试 248

10.3.2 深度测试 250

10.3.3 模板测试的步骤 251

10.3.4 片段测试的用途 252

10.4 全缓冲区操作 254

10.4.1 控制缓冲区的更新 254

10.4.2 清理缓冲区 254

10.5 ClippingNode 255

10.5.1 ClippingNode的绘制流程 255

10.5.2 ClippingNode的模板测试分析 256

10.6 本章小结 258

第11章 多分辨率支持 259

11.1 概述 259

11.2 设计分辨率 260

11.2.1 缩放策略 261

11.2.2 调整元素位置 262

11.2.3 几个有用的变量 263

11.2.4 使用屏幕分辨率 264

11.2.5 视口设置 264

11.2.6 什么时候缩放了 265

11.3 资源分辨率 267

11.3.1 资源分辨率的设置 267

11.3.2 真实分辨率InPixels 268

11.3.3 什么时候缩放资源 269

11.4 本章小结 270

第12章 事件分发 272

12.1 概述 272

12.1.1 什么是事件 272

12.1.2 事件的工作机制 272

12.1.3 事件系统的特点 273

12.2 订阅者 274

12.2.1 事件类型 275

12.2.2 注册与管理订阅者 276

12.3 事件的分发 278

12.3.1 订阅者的排序 280

12.3.2 嵌套事件 282

12.3.3 在事件分发中修改订阅者 282

12.3.4 停止分发事件 283

12.4 事件与Node 284

12.4.1 暂停与恢复 284

12.4.2 删除订阅者 285

12.5 触摸事件 285

12.5.1 EventListenerTouchAllAtOnce 286

12.5.2 EventListenerTouchOneByOne 286

12.5.3 单点和多点触摸之间的关系 288

12.5.4 触摸点的位置判断 288

12.5.5 可见性与触摸事件 289

12.6 其他 289

12.6.1 其他操作系统事件 290

12.6.2 EventCustom 290

12.6.3 内存管理 290

12.6.4 回调与返回值 291

12.6.5 单元测试 291

12.6.6 其他事件 291

12.7 本章小结 292

第13章 字体的故事 293

13.1 计算机字体的历史 293

13.2 轮廓字形概述 294

13.2.1 点 295

13.2.2 轮廓 295

13.2.3 轮廓的方向 296

13.2.4 轮廓的交叉 296

13.2.5 混合轮廓字形 296

13.2.6 字形格子 297

13.3 FreeType字体引擎 297

13.3.1 字体文件及字形索引 298

13.3.2 字符度量 298

13.3.3 FreeType字形解析过程 299

13.3.4 FreeType字形装载 301

13.4 FontAtlas 304

13.4.1 Font 305

13.4.2 FontAtlasCache 308

13.5 Label 309

13.5.1 通用属性 310

13.5.2 Font字符集 312

13.5.3 轮廓字体的缩放 312

13.5.4 特效 316

13.6 使用字体的最佳实践 319

第14章 动画系统 321

14.1 概述 321

14.2 线性插值 323

14.2.1 标量插值 323

14.2.2 矢量插值 323

14.2.3 变换矩阵插值 324

14.2.4 插值在动画系统中的运用 324

14.3 给元素添加动画 326

14.3.1 Action是一个自描述的对象 326

14.3.2 在Node上执行动画 327

14.3.3 控制动画的动画 329

14.4 动画系统架构 331

14.4.1 Speed 333

14.4.2 缓动函数 333

14.4.3 自定义动画——精灵闪白 334

14.5 本章小结 337

第15章 碰撞及物理引擎 339

15.1 物理引擎概述 339

15.2 碰撞检测系统 340

15.2.1 刚体 340

15.2.2 接触和碰撞 343

15.2.3 碰撞查询 348

15.3 刚体动力学 349

15.3.1 控制刚体的运动 349

15.3.2 碰撞响应 350

15.3.3 约束 351

15.4 整合物理引擎 352

15.4.1 刚体与可视对象 352

15.4.2 物理世界 355

15.4.3 游戏循环阶段 357

15.5 预处理与工具 357

15.6 本章小结 358

第16章 运行时游戏对象模型 360

16.1 概述 360

16.2 运行时游戏对象模型 361

16.2.1 以对象为中心的架构 362

16.2.2 组件模型 364

16.2.3 以属性为中心的架构 367

16.3 Entity Component System 369

16.3.1 属性结构 370

16.3.2 分离数据与行为 371

16.3.3 数据驱动 372

16.4 对象查询与消息通信 373

16.4.1 根据唯一标识符查询 374

16.4.2 根据类型查询 375

16.4.3 面向类型编程 375

16.4.4 游戏对象数据库 376

16.5 实时更新游戏对象 377

16.5.1 更新的性能优化 377

16.5.2 更新的时序 377

16.6 本章小结 379

第17章 Genius-x开源框架 381

17.1 Genius-x是什么 381

17.1.1 Genius-x架构一览 382

17.1.2 Genius-x项目结构及使用 384

17.2 游戏对象模型 385

17.2.1 Entity 385

17.2.2 Component 388

17.2.3 System 391

17.2.4 ECSManager 394

17.2.5 数据驱动 397

17.2.6 NodeCom 399

17.2.7 对象的层级结构 403

17.3 数据格式、加载及串流 403

17.3.1 数据格式 404

17.3.2 文件加载和管理 405

17.3.3 游戏世界的串流 406

17.4 游戏通用系统 407

17.5 共享组件 409

17.6 示例 409

第18章 脚本 411

18.1 脚本的概念 411

18.1.1 脚本语言的特征 412

18.1.2 Lua脚本语言 412

18.1.3 脚本所需的架构 413

18.2 运行时脚本语言的功能 415

18.2.1 对原生编程语言的接口 415

18.2.2 游戏对象句柄 416

18.2.3 在脚本中接收及处理事件 423

18.2.4 发送事件 427

18.2.5 面向对象脚本语言 427

18.3 Lua bindings 430

18.3.1 生成绑定代码 430

18.3.2 在程序中使用绑定代码 431

18.3.3 自定义绑定 432

18.4 在Lua中使用Genius-x 433

18.4.1 配置环境 433

18.4.2 创建Component脚本 433

18.4.3 创建System脚本 434

18.4.4 其他接口 435

18.5 本章小结 435

作者简介

编辑

秦春林: 毕业于合肥工业大学,自大学开始自学编程,先后从事过工作流软件,云计算,Web等相关的工作。2011年开始进入游戏开发领域,主持并移植了Cocos2d-x-for-XNA项目。喜欢技术分享,发起并组织了北京快乐技术沙龙,多次作为讲师参与微软,CSDN,51CTO以及9RIA等组织的各类技术培训和讲座。参与了手游项目《天降》的开发,目前主要的兴趣方向是计算机图形学和游戏引擎架构,致力于用软件技术丰富游戏世界的表现及品质。

下载地址:网盘下载

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容