我所理解的Cocos2d-x pdf

图书网 2020年4月10日23:06:121 2.1K
摘要

《我所理解的Cocos2d-x》完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGLES及游戏引擎架构,全面提升游戏开发相关知识。

我所理解的Cocos2d-x 作者:秦春林

我所理解的Cocos2d-x 出版社:电子工业出版社

我所理解的Cocos2d-x 内容简介

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

《我所理解的Cocos2d-x》面向中、高级开发者,可作为初级开发者进阶的教程,也可作为高校游戏引擎架构及图形学相关专业的参考教材。

我所理解的Cocos2d-x 目录

第1章 全新的Cocos2d-x 3.0

1.1 Cocos2d-x 3.0的历史意义

1.1.1 回归C++风格

1.1.2 更灵活的渲染架构

1.1.3 更自由的发展

1.2 Cocos2d-x 3.0的新特性

1.2.1 使用C++风格

1.2.2 跨平台的Label

1.2.3 新的渲染系统

1.2.4 统一的消息分发

1.2.5 物理引擎集成

1.2.6 新的数据结构

1.2.7 其他

1.3 Cocos2d-x引擎展望

1.3.1 3D

1.3.2 Cocos Code IDE

1.4 本章小结

第2章 Cocos2d-x架构一瞥

2.1 Cocos2d-x引擎系统总览

2.2 Cocos2d-x内存管理机制

2.2.1 C++显式堆内存管理

2.2.2 C++ 11中的智能指针

2.2.3 为什么不使用智能指针

2.2.4 垃圾回收机制

2.2.5 Cocos2d-x内存管理机制

2.2.6 Cocos2d-x中的智能指针

2.2.7 怎样进行内存管理

2.3 UI树及运行时游戏对象

2.3.1 位置与变换

2.3.2 坐标系

2.3.3 UI树

2.3.4 UI元素与内存管理

2.4 应用程序架构

2.4.1 游戏生命周期

2.4.2 窗口尺寸

2.4.3 场景管理

2.4.4 游戏循环

2.5 实时更新游戏对象

2.5.1 帧率

2.5.2 Scheduler

2.5.3 时间线

2.5.4 逻辑更新优先级

2.5.5 性能问题

2.6 Cocos2d-x的主线程

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

2.6.2 纹理的异步加载

2.6.3 异步处理的单元测试

2.7 本章小结

第3章 OpenGL ES 2.0概览

3.1 图形处理器简介

3.2 什么是OpenGL ES

3.3 OpenGL ES 2.0渲染管线

3.3.1 顶点数组

3.3.2 顶点着色器

3.3.3 图元装配

3.3.4 光栅化

3.3.5 片段着色器

3.3.6 片段测试

3.4 渲染管线中的并行计算

3.5 构建高性能的渲染引擎

3.6 帧缓冲

3.7 本章小结

第4章 全新的绘制系统

4.1 新绘制系统的特点

4.2 绘制系统概览

4.3 RenderCommand

4.4 RenderQueue

4.5 GroupCommand

4.6 Render

4.6.1 RenderCommand的排序

4.6.2 QuadCommand

4.7 元素的可见性

4.8 绘制的时机

4.9 示例:自定义RenderCommand

4.10 本章小结

第5章 纹理

5.1 光栅化

5.1.1 多重采样

5.1.2 纹理坐标

5.2 像素矩形

5.2.1 像素存储模式

5.2.2 纹理数据的传输

5.2.3 解包

5.3 客户端图像格式

5.3.1 纹理格式的对应关系

5.3.2 图像数据格式转换

5.4 纹理对象和加载纹理

5.5 纹理单元与多重纹理

5.6 纹理缩放

5.6.1 纹理缩小

5.6.2 纹理放大

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

5.7 多级纹理

5.7.1 多级纹理过滤模式

5.7.2 多级纹理的上传

5.7.3 多级纹理的生成

5.8 纹理压缩

5.8.1 压缩纹理的特点

5.8.2 压缩纹理的实现

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

5.8.4 PVRTC和PVRTC2

5.8.5 ETC

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

5.9 纹理缓存管理

5.9.1 纹理的生命周期

5.9.2 用TextureCache来管理纹理

5.9.3 场景过渡中的资源管理

5.9.4 Android下的纹理恢复处理

5.10 纹理所占内存的计算

5.11 使用纹理最佳实践

5.11.1 硬件层面

5.11.2 程序层面

5.11.3 资源层面

5.12 本章小结

第6章 精灵

6.1 用Sprite绘制一个矩形区域

6.1.1 V3F_C4B_T2F_Quad结构体

6.1.2 使用QuadCommand进行绘制

6.1.3 将Sprite作为子元素

6.2 Sprite的绘制属性

6.2.1 颜色混合

6.2.2 颜色叠加

6.3 Alpha预乘

6.4 精灵表

6.5 精灵动画

6.6 批绘制还是自动批绘制

6.6.1 SpriteBatchNode

6.6.2 TextureAtlas

6.6.3 SpriteBatchNode的特点和限制

6.7 部分拉伸:九宫格

6.8 本章小结

第7章 OpenGL ES着色语言

7.1 概览

7.2 基础类型

7.2.1 空类型

7.2.2 布尔类型

7.2.3 整型

7.2.4 浮点型

7.2.5 矢量

7.2.6 矩阵

7.2.7 采样器

7.2.8 结构体

7.2.9 数组

7.3 存储限定符

7.3.1 默认限定符

7.3.2 常量限定符

7.3.3 属性限定符

7.3.4 全局限定符

7.3.5 易变量限定符

7.4 构造器

7.4.1 标量的转换构造

7.4.2 矢量和矩阵构造器

7.4.3 结构体构造器

7.5 矢量的分量

7.6 矩阵的分量

7.7 结构体和成员

7.8 矢量和矩阵操作符

7.9 本章小结

第8章 OpenGL ES着色程序

8.1 顶点和顶点数组

8.1.1 图元与顶点

8.1.2 顶点属性状态

8.1.3 顶点数组

8.2 顶点缓冲对象

8.2.1 顶点数组缓冲对象

8.2.2 索引数组缓冲对象

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

8.3 着色器程序

8.3.1 着色器程序字符串

8.3.2 着色器的加载和编译

8.3.3 着色器程序对象

8.4 Cocos2d-x着色器子系统

8.4.1 GLProgram与Node之间的关系

8.4.2 GLProgramState

8.4.3 着色器程序的使用过程

8.4.4 GLProgramState的管理

8.4.5 GLProgramState的限制

8.5 顶点着色器

8.5.1 输入参数

8.5.2 顶点坐标输出参数

8.5.3 易变量输出参数

8.6 片段着色器

8.6.1 输入参数

8.6.2 纹理采样

8.6.3 输出参数

8.7 着色器编辑工具

8.8 示例

8.8.1 使用ETC压缩纹理

8.8.2 动态设置着色器参数

8.9 着色器程序最佳实践

8.10 本章小结

第9章 帧缓冲

9.1 GroupCommand

9.1.1 使用GroupCommand的流程

9.1.2 GroupCommand的限制

9.2 帧缓冲

9.2.1 绑定和管理帧缓冲

9.2.2 将图像附加到帧缓冲

9.2.3 渲染缓冲对象

9.2.4 将Renderbuffer附加到帧缓冲

9.2.5 将Texture附加到帧缓冲

9.2.6 帧缓冲完成状态

9.3 RenderTexture

9.3.1 RenderTexture的初始化

9.3.2 RenderTexture的绘制

9.3.3 ReadPixels

9.3.4 RenderTexture的限制及用途

9.4 本章小结

第10章 片段操作

10.1 片段操作简述

10.2 逻辑缓冲区

10.2.1 位平面

10.2.2 按位计算

10.3 片段测试

10.3.1 模板测试

10.3.2 深度测试

10.3.3 模板测试的步骤

10.3.4 片段测试的用途

10.4 全缓冲区操作

10.4.1 控制缓冲区的更新

10.4.2 清理缓冲区

10.5 ClippingNode

10.5.1 ClippingNode的绘制流程

10.5.2 ClippingNode的模板测试分析

10.6 本章小结

第11章 多分辨率支持

11.1 概述

11.2 设计分辨率

11.2.1 缩放策略

11.2.2 调整元素位置

11.2.3 几个有用的变量

11.2.4 使用屏幕分辨率

11.2.5 视口设置

11.2.6 什么时候缩放了

11.3 资源分辨率

11.3.1 资源分辨率的设置

11.3.2 真实分辨率InPixels

11.3.3 什么时候缩放资源

11.4 本章小结

第12章 事件分发

12.1 概述

12.1.1 什么是事件

12.1.2 事件的工作机制

12.1.3 事件系统的特点

12.2 订阅者

12.2.1 事件类型

12.2.2 注册与管理订阅者

12.3 事件的分发

12.3.1 订阅者的排序

12.3.2 嵌套事件

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

12.3.4 停止分发事件

12.4 事件与Node

12.4.1 暂停与恢复

12.4.2 删除订阅者

12.5 触摸事件

12.5.1 EventListenerTouchAllAtOnce

12.5.2 EventListenerTouchOneByOne

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

12.5.4 触摸点的位置判断

12.5.5 可见性与触摸事件

12.6 其他

12.6.1 其他操作系统事件

12.6.2 EventCustom

12.6.3 内存管理

12.6.4 回调与返回值

12.6.5 单元测试

12.6.6 其他事件

12.7 本章小结

第13章 字体的故事

13.1 计算机字体的历史

13.2 轮廓字形概述

13.2.1 点

13.2.2 轮廓

13.2.3 轮廓的方向

13.2.4 轮廓的交叉

13.2.5 混合轮廓字形

13.2.6 字形格子

13.3 FreeType字体引擎

13.3.1 字体文件及字形索引

13.3.2 字符度量

13.3.3 FreeType字形解析过程

13.3.4 FreeType字形装载

13.4 FontAtlas

13.4.1 Font

13.4.2 FontAtlasCache

13.5 Label

13.5.1 通用属性

13.5.2 Font字符集

13.5.3 轮廓字体的缩放

13.5.4 特效

13.6 使用字体的最佳实践

第14章 动画系统

14.1 概述

14.2 线性插值

14.2.1 标量插值

14.2.2 矢量插值

14.2.3 变换矩阵插值

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

14.3 给元素添加动画

14.3.1 Action是一个自描述的对象

14.3.2 在Node上执行动画

14.3.3 控制动画的动画

14.4 动画系统架构

14.4.1 Speed

14.4.2 缓动函数

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

14.5 本章小结

第15章 碰撞及物理引擎

15.1 物理引擎概述

15.2 碰撞检测系统

15.2.1 刚体

15.2.2 接触和碰撞

15.2.3 碰撞查询

15.3 刚体动力学

15.3.1 控制刚体的运动

15.3.2 碰撞响应

15.3.3 约束

15.4 整合物理引擎

15.4.1 刚体与可视对象

15.4.2 物理世界

15.4.3 游戏循环阶段

15.5 预处理与工具

15.6 本章小结

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

16.1 概述

16.2 运行时游戏对象模型

16.2.1 以对象为中心的架构

16.2.2 组件模型

16.2.3 以属性为中心的架构

16.3 Entity Component System

16.3.1 属性结构

16.3.2 分离数据与行为

16.3.3 数据驱动

16.4 对象查询与消息通信

16.4.1 根据唯一标识符查询

16.4.2 根据类型查询

16.4.3 面向类型编程

16.4.4 游戏对象数据库

16.5 实时更新游戏对象

16.5.1 更新的性能优化

16.5.2 更新的时序

16.6 本章小结

第17章 Genius-x开源框架

17.1 Genius-x是什么

17.1.1 Genius-x架构一览

17.1.2 Genius-x项目结构及使用

17.2 游戏对象模型

17.2.1 Entity

17.2.2 Component

17.2.3 System

17.2.4 ECSManager

17.2.5 数据驱动

17.2.6 NodeCom

17.2.7 对象的层级结构

17.3 数据格式、加载及串流

17.3.1 数据格式

17.3.2 文件加载和管理

17.3.3 游戏世界的串流

17.4 游戏通用系统

17.5 共享组件

17.6 示例

第18章 脚本

18.1 脚本的概念

18.1.1 脚本语言的特征

18.1.2 Lua脚本语言

18.1.3 脚本所需的架构

18.2 运行时脚本语言的功能

18.2.1 对原生编程语言的接口

18.2.2 游戏对象句柄

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

18.2.4 发送事件

18.2.5 面向对象脚本语言

18.3 Lua bindings

18.3.1 生成绑定代码

18.3.2 在程序中使用绑定代码

18.3.3 自定义绑定

18.4 在Lua中使用Genius-x

18.4.1 配置环境

18.4.2 创建Component脚本

18.4.3 创建System脚本

18.4.4 其他接口

18.5 本章小结

参考文献

我所理解的Cocos2d-x 精彩文摘

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

到目前为止,我们讨论的所有内容都可以称之为低阶引擎系统,例如Renderer如何将网格绘制到屏幕上,纹理如何被使用,字体如何被绘制,如何从人体学接口设备获取玩家输入信息,如何处理物体的碰撞,以及如何对物体执行动画等。这些几乎都是和游戏性无关的一些基础功能。

当开始设计游戏的时候,开发者面对的往往是一个更上层的,可以称之为游戏性(Gameplay)基础系统的高阶引擎系统,例如怎样表示游戏中的对象,怎样组织它们的行为和状态,设计师怎样通过数据驱动来快速修改关卡及游戏配置,怎样高效有序地组织游戏对象之间的逻辑更新等。这些笔者称之为游戏性架构(Gameplay Architecture),或者很多开发者称之为游戏架构。理论上,游戏性架构的一些理论和实践甚至可以和游戏引擎无关。

当然,游戏性架构其实涉及很多内容,例如它可以包括运行时游戏对象模型、关卡及串流、实时更新游戏对象模型、事件分发及脚本系统等。本章将会聚焦于运行时游戏对象模型,讲述常见的几种游戏对象设计的概念、方式及优缺点。

16.1 概述

在所有游戏性架构相关的内容中,运行时游戏对象模型可能是最复杂的系统,并且不同的游戏引擎呈现出的差异极大。例如Unity3D提供的组件模型,虚幻引擎提供的面向对象继承的模型,其他一些游戏例如《末日危城(Dungeon Siege)》则使用一种不同于两者的基于数据驱动的游戏对象模型。

这些不同的游戏对象模型之间呈现出很大的设计思维及使用上的差异,但是它们往往都提供或者必须具备一些通用的功能,这些包括但不限于:

(1)管理游戏对象的创建及销毁。游戏中经常会动态创建各种游戏对象,例如一个塔防游戏会定时出现一些小怪物,子弹在撞击到目标时立即被销毁等。许多游戏引擎都提供一种统一的动态创建、销毁游戏对象的方式,并管理游戏对象的内存及资源,例如第17章即将讲述的Genius-x框架中使用createEntity()、removeEntity(entity)来动态创建和销毁一个游戏对象。但是在Cocos2d-x中却不是通过统一的方式创建和销毁游戏对象,它使用每个Node子类自己的构造函数来创建,并使用一种特殊的方式管理内存(参见第2章)。

(2)联系底层游戏引擎。每个游戏对象要能够通过某种方式访问底层的游戏引擎系统,例如能够渲染三角形网格、执行碰撞检测,对角色执行动画等。在Unity3D引擎中,每个游戏对象(GameObject)可以通过添加一个与底层引擎功能相关的组件(Componment)来访问底层引擎系统。Cocos2d-x的Node类则直接集成了物理模拟、动画、实时逻辑更新等接口。

(3)实时模拟对象行为。游戏是一个高度实时的系统,游戏对象的状态、行为在每一帧都可能会随着时间发生变化,这需要一套高效的游戏对象更新机制。对象可能需要以特定的逻辑次序进行更新。此外,除了逻辑次序,游戏对象之间还可能存在依赖关系,需要按照一定的次序更新(关于游戏对象更新的次序会在本章后面讲述)。

(4)定义新游戏对象类型。在开发过程中,随着游戏需求的改变和演进,游戏对象模型必须有足够的弹性,可以容易地加入新的对象类型。理想情况下,新的游戏类型应可以完全用数据驱动的方式定义,但是在实际情况中,大部分新增游戏类型都需要程序员的参与。在Genius-x框架中,新的不同行为的组合类型可以通过修改数据文件来实现,而新的行为则可以通过脚本来实现,然后修改数据文件来添加新的行为。

(5)唯一的对象标识符。游戏世界可能会包含成百上千的游戏对象,在运行时必须能够识别和找到想要的对象,这意味着每种对象需要有某种唯一标识符。例如在Cocos2d-x 中可以通过给一个Node指定一个字符串名称,然后通过字符串标识符查找一个游戏对象。

(6)游戏对象查询。除了上面按游戏唯一标识符查询游戏对象,游戏性系统还需要一些更高级的查询方式,例如找到某种类型的游戏对象,或者某个范围的敌人等。在面向组件或者属性的架构中,游戏对象是以组件/属性为单位存储的,很容易查找具有某个属性类型的游戏对象组合,并且这种查找游戏对象的方式对数据驱动更友好,笔者称之为面向类型编程。

除了上述提到的这些,运行时游戏对象模型还包括有限状态机,用于同一个网络内的对象复制、对象序列化和持久性存档等。

图书网:我所理解的Cocos2d-x pdf

继续阅读

→→→→→→→→→→→→→→→→→→→→查找获取

行业软件及应用

应用预测建模pdf

应用预测建模简介: 这是一本专注于预测建模的数据分析书,意在为实践者提供预测建模过程的指导,比如如何进行数据预处理、模型调优、预测变量重要性度量、变量选择等。读者可以从中学到许多建模方法以及提高对许多...
行业软件及应用

Excel2016应用大全pdf

1.全面:详尽而又系统地介绍了Excel的所有技术。 2.实战:精选Excel Home的海量案例,零距离接触Excel专家级使用方法。 3.深入:对一些常常困扰学习者的功能深入揭...
行业软件及应用

Excel VBA完全自学手册pdf

《Excel VBA完全自学手册》适合希望学习与掌握Excel VBA程序开发的任何用户,主要适合初、中级水平的用户,对高级开发人员也有一定的参考价值。另外,《Excel VBA完...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:1   其中:访客  1   博主  0
    • 江馨怡
      江馨怡 9

      很好