我所理解的Cocos2d-x

我所理解的Cocos2d-x

暂无评价综合评分的显示会考虑用户真实性等多项因素,每部作品出现综合评分的时间不定。
8.589 评价豆瓣读书
春暖花开季 恰是读书时满500减300、满200减120、满100减60活动详情

作品简介

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

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

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

作品目录

  1. 前言
  2. 致谢
  3. 推荐序
  4. 第1章 全新的Cocos2d-x 3.0
  5. 1.1 Cocos2d-x 3.0的历史意义
  6. 1.1.1 回归C++风格
  7. 1.1.2 更灵活的渲染架构
  8. 1.1.3 更自由的发展
  9. 1.2 Cocos2d-x 3.0的新特性
  10. 1.2.1 使用C++风格
  11. 1.2.2 跨平台的Label
  12. 1.2.3 新的渲染系统
  13. 1.2.4 统一的消息分发
  14. 1.2.5 物理引擎集成
  15. 1.2.6 新的数据结构
  16. 1.Map<K,V>的性能
  17. 2.与Cocos2d-x内存管理的结合
  18. 3.移动语义
  19. 1.2.7 其他
  20. 1.3 Cocos2d-x引擎展望
  21. 1.3.1 3D
  22. 1.3.2 Cocos Code IDE
  23. 1.4 本章小结
  24. 第2章 Cocos2d-x架构一瞥
  25. 2.1 Cocos2d-x引擎系统总览
  26. 2.2 Cocos2d-x内存管理机制
  27. 2.2.1 C++显式堆内存管理
  28. 2.2.2 C++11中的智能指针
  29. 2.2.3 为什么不使用智能指针
  30. 2.2.4 垃圾回收机制
  31. 2.2.5 Cocos2d-x内存管理机制
  32. 1.引用计数
  33. 2.用autorelease()方法声明一个“智能指针”
  34. 3.AutoreleasePool队列
  35. 2.2.6 Cocos2d-x中的智能指针
  36. 1.构造函数
  37. 2.赋值操作符
  38. 3.弱引用赋值
  39. 4.其他操作
  40. 5.RefPtr<T>与容器
  41. 6.RefPtr<T>与自动回收池的比较
  42. 7.RefPtr<T>的缺陷
  43. 2.2.7 怎样进行内存管理
  44. 2.3 UI树及运行时游戏对象
  45. 2.3.1 位置与变换
  46. 2.3.2 坐标系
  47. 1.世界坐标系
  48. 2.本地坐标系
  49. 3.坐标变换
  50. 2.3.3 UI树
  51. 1.UI树的遍历
  52. 2.逻辑深度
  53. 3.模型视图变换矩阵
  54. 4.运行时游戏对象
  55. 2.3.4 UI元素与内存管理
  56. 2.4 应用程序架构
  57. 2.4.1 游戏生命周期
  58. 2.4.2 窗口尺寸
  59. 2.4.3 场景管理
  60. 2.4.4 游戏循环
  61. 2.5 实时更新游戏对象
  62. 2.5.1 帧率
  63. 2.5.2 Scheduler
  64. 2.5.3 时间线
  65. 2.5.4 逻辑更新优先级
  66. 2.5.5 性能问题
  67. 2.6 Cocos2d-x的主线程
  68. 2.6.1 在主线程中执行异步处理
  69. 2.6.2 纹理的异步加载
  70. 2.6.3 异步处理的单元测试
  71. 2.7 本章小结
  72. 第3章 OpenGL ES 2.0概览
  73. 3.1 图形处理器简介
  74. 3.2 什么是OpenGL ES
  75. 3.3 OpenGL ES 2.0渲染管线
  76. 3.3.1 顶点数组
  77. 3.3.2 顶点着色器
  78. 3.3.3 图元装配
  79. 3.3.4 光栅化
  80. 3.3.5 片段着色器
  81. 3.3.6 片段测试
  82. 3.4 渲染管线中的并行计算
  83. 3.5 构建高性能的渲染引擎
  84. 3.6 帧缓冲
  85. 3.7 本章小结
  86. 第4章 全新的绘制系统
  87. 4.1 新绘制系统的特点
  88. 4.2 绘制系统概览
  89. 4.3 RenderCommand
  90. 4.4 RenderQueue
  91. 4.5 GroupCommand
  92. 4.6 Render
  93. 4.6.1 RenderCommand的排序
  94. 4.6.2 QuadCommand
  95. 4.7 元素的可见性
  96. 4.8 绘制的时机
  97. 4.9 示例:自定义RenderCommand
  98. 4.10 本章小结
  99. 第5章 纹理
  100. 5.1 光栅化
  101. 5.1.1 多重采样
  102. 5.1.2 纹理坐标
  103. 5.2 像素矩形
  104. 5.2.1 像素存储模式
  105. 5.2.2 纹理数据的传输
  106. 5.2.3 解包
  107. 5.3 客户端图像格式
  108. 5.3.1 纹理格式的对应关系
  109. 5.3.2 图像数据格式转换
  110. 5.4 纹理对象和加载纹理
  111. 5.5 纹理单元与多重纹理
  112. 5.6 纹理缩放
  113. 5.6.1 纹理缩小
  114. 5.6.2 纹理放大
  115. 5.6.3 在Cocos2d-x中设置过滤模式
  116. 5.7 多级纹理
  117. 5.7.1 多级纹理过滤模式
  118. 5.7.2 多级纹理的上传
  119. 5.7.3 多级纹理的生成
  120. 5.8 纹理压缩
  121. 5.8.1 压缩纹理的特点
  122. 5.8.2 压缩纹理的实现
  123. 5.8.3 在Cocos2d-x中使用压缩纹理
  124. 5.8.4 PVRTC和PVRTC2
  125. 5.8.5 ETC
  126. 5.8.6 针对不同设备使用不同的压缩纹理
  127. 5.9 纹理缓存管理
  128. 5.9.1 纹理的生命周期
  129. 5.9.2 用TextureCache来管理纹理
  130. 5.9.3 场景过渡中的资源管理
  131. 1.基于引用计数的资源管理
  132. 2.更好的场景过渡资源管理
  133. 5.9.4 Android下的纹理恢复处理
  134. 5.10 纹理所占内存的计算
  135. 5.11 使用纹理最佳实践
  136. 5.11.1 硬件层面
  137. 5.11.2 程序层面
  138. 5.11.3 资源层面
  139. 5.12 本章小结
  140. 第6章 精灵
  141. 6.1 用Sprite绘制一个矩形区域
  142. 6.1.1 V3F_C4B_T2F_Quad结构体
  143. 6.1.2 使用QuadCommand进行绘制
  144. 6.1.3 将Sprite作为子元素
  145. 6.2 Sprite的绘制属性
  146. 6.2.1 颜色混合
  147. 1.源、目标和缓冲区
  148. 2.混合计算
  149. 3.混合与深度测试
  150. 6.2.2 颜色叠加
  151. 1.Node的颜色叠加
  152. 2.精灵的颜色叠加
  153. 6.3 Alpha预乘
  154. 6.4 精灵表
  155. 6.5 精灵动画
  156. 6.6 批绘制还是自动批绘制
  157. 6.6.1 SpriteBatchNode
  158. 6.6.2 TextureAtlas
  159. 6.6.3 SpriteBatchNode的特点和限制
  160. 6.7 部分拉伸:九宫格
  161. 6.8 本章小结
  162. 第7章 OpenGL ES着色语言
  163. 7.1 概览
  164. 7.2 基础类型
  165. 7.2.1 空类型
  166. 7.2.2 布尔类型
  167. 7.2.3 整型
  168. 7.2.4 浮点型
  169. 7.2.5 矢量
  170. 7.2.6 矩阵
  171. 7.2.7 采样器
  172. 7.2.8 结构体
  173. 7.2.9 数组
  174. 7.3 存储限定符
  175. 7.3.1 默认限定符
  176. 7.3.2 常量限定符
  177. 7.3.3 属性限定符
  178. 7.3.4 全局限定符
  179. 7.3.5 易变量限定符
  180. 7.4 构造器
  181. 7.4.1 标量的转换构造
  182. 7.4.2 矢量和矩阵构造器
  183. 7.4.3 结构体构造器
  184. 7.5 矢量的分量
  185. 7.6 矩阵的分量
  186. 7.7 结构体和成员
  187. 7.8 矢量和矩阵操作符
  188. 7.9 本章小结
  189. 第8章 OpenGL ES着色程序
  190. 8.1 顶点和顶点数组
  191. 8.1.1 图元与顶点
  192. 8.1.2 顶点属性状态
  193. 8.1.3 顶点数组
  194. 1.顶点数组数据结构
  195. 2.在顶点着色器中定义属性
  196. 3.顶点属性的绑定
  197. 4.顶点数组的传输
  198. 8.2 顶点缓冲对象
  199. 8.2.1 顶点数组缓冲对象
  200. 8.2.2 索引数组缓冲对象
  201. 8.2.3 使用VAO缓存顶点数组状态
  202. 8.3 着色器程序
  203. 8.3.1 着色器程序字符串
  204. 8.3.2 着色器的加载和编译
  205. 8.3.3 着色器程序对象
  206. 8.4 Cocos2d-x着色器子系统
  207. 8.4.1 GLProgram与Node之间的关系
  208. 8.4.2 GLProgramState
  209. 1.设置顶点属性
  210. 2.设置全局属性
  211. 8.4.3 着色器程序的使用过程
  212. 8.4.4 GLProgramState的管理
  213. 8.4.5 GLProgramState的限制
  214. 8.5 顶点着色器
  215. 8.5.1 输入参数
  216. 8.5.2 顶点坐标输出参数
  217. 8.5.3 易变量输出参数
  218. 8.6 片段着色器
  219. 8.6.1 输入参数
  220. 8.6.2 纹理采样
  221. 8.6.3 输出参数
  222. 8.7 着色器编辑工具
  223. 8.8 示例
  224. 8.8.1 使用ETC压缩纹理
  225. 8.8.2 动态设置着色器参数
  226. 8.9 着色器程序最佳实践
  227. 8.10 本章小结
  228. 第9章 帧缓冲
  229. 9.1 GroupCommand
  230. 9.1.1 使用GroupCommand的流程
  231. 9.1.2 GroupCommand的限制
  232. 9.2 帧缓冲
  233. 9.2.1 绑定和管理帧缓冲
  234. 9.2.2 将图像附加到帧缓冲
  235. 9.2.3 渲染缓冲对象
  236. 9.2.4 将Renderbuffer附加到帧缓冲
  237. 9.2.5 将Texture附加到帧缓冲
  238. 9.2.6 帧缓冲完成状态
  239. 1.帧缓冲附加点完成状态
  240. 2.帧缓冲完成状态
  241. 3.完成状态对帧缓冲操作的影响
  242. 9.3 RenderTexture
  243. 9.3.1 RenderTexture的初始化
  244. 9.3.2 RenderTexture的绘制
  245. 9.3.3 ReadPixels
  246. 9.3.4 RenderTexture的限制及用途
  247. 9.4 本章小结
  248. 第10章 片段操作
  249. 10.1 片段操作简述
  250. 10.2 逻辑缓冲区
  251. 10.2.1 位平面
  252. 10.2.2 按位计算
  253. 1.移位运算符
  254. 2.逻辑按位运算符
  255. 10.3 片段测试
  256. 10.3.1 模板测试
  257. 10.3.2 深度测试
  258. 10.3.3 模板测试的步骤
  259. 10.3.4 片段测试的用途
  260. 1.深度测试的用途
  261. 2.模板测试的用途
  262. 10.4 全缓冲区操作
  263. 10.4.1 控制缓冲区的更新
  264. 10.4.2 清理缓冲区
  265. 10.5 ClippingNode
  266. 10.5.1 ClippingNode的绘制流程
  267. 10.5.2 ClippingNode的模板测试分析
  268. 10.6 本章小结
  269. 第11章 多分辨率支持
  270. 11.1 概述
  271. 11.2 设计分辨率
  272. 11.2.1 缩放策略
  273. 11.2.2 调整元素位置
  274. 11.2.3 几个有用的变量
  275. 11.2.4 使用屏幕分辨率
  276. 11.2.5 视口设置
  277. 11.2.6 什么时候缩放了
  278. 11.3 资源分辨率
  279. 11.3.1 资源分辨率的设置
  280. 11.3.2 真实分辨率InPixels
  281. 11.3.3 什么时候缩放资源
  282. 11.4 本章小结
  283. 第12章 事件分发
  284. 12.1 概述
  285. 12.1.1 什么是事件
  286. 12.1.2 事件的工作机制
  287. 12.1.3 事件系统的特点
  288. 12.2 订阅者
  289. 12.2.1 事件类型
  290. 12.2.2 注册与管理订阅者
  291. 1.注册订阅者
  292. 2.删除订阅者
  293. 3.修改订阅者
  294. 12.3 事件的分发
  295. 12.3.1 订阅者的排序
  296. 12.3.2 嵌套事件
  297. 12.3.3 在事件分发中修改订阅者
  298. 12.3.4 停止分发事件
  299. 12.4 事件与Node
  300. 12.4.1 暂停与恢复
  301. 12.4.2 删除订阅者
  302. 12.5 触摸事件
  303. 12.5.1 EventListenerTouchAllAtOnce
  304. 12.5.2 EventListenerTouchOneByOne
  305. 12.5.3 单点和多点触摸之间的关系
  306. 12.5.4 触摸点的位置判断
  307. 12.5.5 可见性与触摸事件
  308. 12.6 其他
  309. 12.6.1 其他操作系统事件
  310. 12.6.2 EventCustom
  311. 12.6.3 内存管理
  312. 12.6.4 回调与返回值
  313. 12.6.5 单元测试
  314. 12.6.6 其他事件
  315. 12.7 本章小结
  316. 第13章 字体的故事
  317. 13.1 计算机字体的历史
  318. 13.2 轮廓字形概述
  319. 13.2.1 点
  320. 13.2.2 轮廓
  321. 13.2.3 轮廓的方向
  322. 13.2.4 轮廓的交叉
  323. 13.2.5 混合轮廓字形
  324. 13.2.6 字形格子
  325. 13.3 FreeType字体引擎
  326. 13.3.1 字体文件及字形索引
  327. 13.3.2 字符度量
  328. 13.3.3 FreeType字形解析过程
  329. 13.3.4 FreeType字形装载
  330. 1.FT_Library类
  331. 2.FT_Face类
  332. 3.FT_Size类
  333. 4.FT_GlyphSlot类
  334. 5.FT_CharMap类
  335. 13.4 FontAtlas
  336. 13.4.1 Font
  337. 1.FontFreeType
  338. 2.FontFNT
  339. 3.FontCharMap
  340. 13.4.2 FontAtlasCache
  341. 13.5 Label
  342. 13.5.1 通用属性
  343. 1.几种尺寸
  344. 2.对齐方式
  345. 3.行高和字间距
  346. 4.字符精灵
  347. 13.5.2 Font字符集
  348. 13.5.3 轮廓字体的缩放
  349. 13.5.4 特效
  350. 1.阴影
  351. 2.描边
  352. 3.发光
  353. 13.6 使用字体的最佳实践
  354. 第14章 动画系统
  355. 14.1 概述
  356. 14.2 线性插值
  357. 14.2.1 标量插值
  358. 14.2.2 矢量插值
  359. 14.2.3 变换矩阵插值
  360. 14.2.4 插值在动画系统中的运用
  361. 14.3 给元素添加动画
  362. 14.3.1 Action是一个自描述的对象
  363. 14.3.2 在Node上执行动画
  364. 1.取消正在执行的动画
  365. 2.动画完成时回调
  366. 3.命名动画
  367. 14.3.3 控制动画的动画
  368. 1.Sequence
  369. 2.Spawn
  370. 3.Repeat和RepeatForever
  371. 14.4 动画系统架构
  372. 14.4.1 Speed
  373. 14.4.2 缓动函数
  374. 14.4.3 自定义动画——精灵闪白
  375. 1.混合着色器
  376. 2.混合动作
  377. 3.使用动作
  378. 14.5 本章小结
  379. 第15章 碰撞及物理引擎
  380. 15.1 物理引擎概述
  381. 15.2 碰撞检测系统
  382. 15.2.1 刚体
  383. 1.刚体的分类
  384. 2.形状
  385. 15.2.2 接触和碰撞
  386. 1.刚体和形状的类别
  387. 2.接触掩码
  388. 3.碰撞掩码
  389. 4.接触回调
  390. 5.碰撞过程总结
  391. 15.2.3 碰撞查询
  392. 15.3 刚体动力学
  393. 15.3.1 控制刚体的运动
  394. 15.3.2 碰撞响应
  395. 1.冲量碰撞响应
  396. 2.摩擦力
  397. 3.环境阻力
  398. 4.休眠
  399. 15.3.3 约束
  400. 15.4 整合物理引擎
  401. 15.4.1 刚体与可视对象
  402. 1.驱动的刚体
  403. 2.游戏驱动的刚体
  404. 15.4.2 物理世界
  405. 15.4.3 游戏循环阶段
  406. 15.5 预处理与工具
  407. 15.6 本章小结
  408. 第16章 运行时游戏对象模型
  409. 16.1 概述
  410. 16.2 运行时游戏对象模型
  411. 16.2.1 以对象为中心的架构
  412. 1.复杂的层次结构
  413. 2.分类学瓶颈
  414. 3.多重继承
  415. 4.冒泡效应
  416. 5.无止境地重构
  417. 16.2.2 组件模型
  418. 1.把继承改为合成
  419. 2.组件的创建及拥有权
  420. 16.2.3 以属性为中心的架构
  421. 1.通过属性类实现
  422. 2.通过脚本实现
  423. 3.以属性为中心设计的优缺点
  424. 16.3 Entity Component System
  425. 16.3.1 属性结构
  426. 16.3.2 分离数据与行为
  427. 16.3.3 数据驱动
  428. 1.属性值
  429. 2.对象结构
  430. 3.事件脚本
  431. 16.4 对象查询与消息通信
  432. 16.4.1 根据唯一标识符查询
  433. 16.4.2 根据类型查询
  434. 16.4.3 面向类型编程
  435. 16.4.4 游戏对象数据库
  436. 16.5 实时更新游戏对象
  437. 16.5.1 更新的性能优化
  438. 16.5.2 更新的时序
  439. 1.更新优先级
  440. 2.桶式更新
  441. 16.6 本章小结
  442. 第17章 Genius-x开源框架
  443. 17.1 Genius-x是什么
  444. 17.1.1 Genius-x架构一览
  445. 1.引擎无关性
  446. 2.事件分发
  447. 3.资源格式,加载
  448. 4.资源串流
  449. 5.运行时游戏对象模型
  450. 6.工具类
  451. 7.游戏性系统
  452. 8.社区共享组件
  453. 9.脚本支持
  454. 10.编辑器
  455. 17.1.2 Genius-x项目结构及使用
  456. 17.2 游戏对象模型
  457. 17.2.1 Entity
  458. 1.唯一标识符
  459. 2.对象的创建
  460. 3.对象的销毁
  461. 4.交通枢纽
  462. 17.2.2 Component
  463. 1.组件类型
  464. 2.组件包含数据
  465. 3.数据解析
  466. 4.向游戏对象添加组件
  467. 5.数据定义
  468. 17.2.3 System
  469. 1.System实例
  470. 2.构造函数
  471. 3.自动附加
  472. 4.生命周期
  473. 5.更新状态
  474. 6.行为事件
  475. 17.2.4 ECSManager
  476. 1.注册组件
  477. 2.ECSManager实例
  478. 3.更新组件
  479. 4.递归性
  480. 17.2.5 数据驱动
  481. 1.数据驱动的流程
  482. 2.一个典型的数据驱动实例
  483. 3.事件驱动
  484. 17.2.6 NodeCom
  485. 1.可视
  486. 2.视组件的绘制
  487. 3.移除可视组件
  488. 4.唯一入口
  489. 17.2.7 对象的层级结构
  490. 17.3 数据格式、加载及串流
  491. 17.3.1 数据格式
  492. 1.ResourceDataDelegate是一个解析器
  493. 2.ResourceDataDelegate是一个数据类
  494. 3.注册数据类
  495. 17.3.2 文件加载和管理
  496. 17.3.3 游戏世界的串流
  497. 1.引用计数管理
  498. 2.统一的资源入口
  499. 17.4 游戏通用系统
  500. 17.5 共享组件
  501. 17.6 示例
  502. 第18章 脚本
  503. 18.1 脚本的概念
  504. 18.1.1 脚本语言的特征
  505. 18.1.2 Lua脚本语言
  506. 18.1.3 脚本所需的架构
  507. 1.回调脚本
  508. 2.事件处理器脚本
  509. 3.以脚本扩展游戏对象类型或定义新类型
  510. 4.组件或属性脚本
  511. 5.脚本驱动的引擎系统
  512. 6.脚本驱动的游戏
  513. 18.2 运行时脚本语言的功能
  514. 18.2.1 对原生编程语言的接口
  515. 18.2.2 游戏对象句柄
  516. 1.Lua函数调用与定义
  517. 2.类对象及注册表
  518. 3.tolua
  519. 4.调用游戏对象方法
  520. 18.2.3 在脚本中接收及处理事件
  521. 1.通信机制
  522. 2.向宿主程序注册Lua函数地址
  523. 3.在宿主程序中调用Lua函数
  524. 4.更好地组建脚本架构
  525. 18.2.4 发送事件
  526. 18.2.5 面向对象脚本语言
  527. 18.3 Lua bindings
  528. 18.3.1 生成绑定代码
  529. 18.3.2 在程序中使用绑定代码
  530. 18.3.3 自定义绑定
  531. 18.4 在Lua中使用Genius-x
  532. 18.4.1 配置环境
  533. 18.4.2 创建Component脚本
  534. 18.4.3 创建System脚本
  535. 18.4.4 其他接口
  536. 18.5 本章小结
  537. 参考文献
载入中

大家都喜欢