很激动(预订 http://item.jd.com/1364702738.html ) 也很抱歉(书拖了好久),只希望那些影响过我的好书的感觉能够传递给每一位读者,感谢那些帮助过我以及所有为Cocos2d-x做出贡献的人!《超体》说生命的意义在于传递知识!抛开金钱,权利,虚荣,生命的精彩来源于那些触动心灵的感知,理解与共鸣…
漫长的等待终于结束了,很抱歉由于出版社的原因,这本书从9月拖到现在,而有些朋友从5月份就开始关注本书了,真的非常感谢大家的肯定与支持,年底我还会补充一些3D相关的章节以免费电子书形式发布。
接下来,是大家检验它的时候了,我希望这本书能够真正给开发者带来帮助,能够全面提升自己,这是我最大的期盼
更新:脚本一章目录更新,是我比较喜欢的章节之一,重点讲述脚本在游戏引擎中的架构,比较各种游戏引擎对脚本的使用方式,全书全部完成,校订,印刷。。。。。
19 脚本
19.1 脚本的概念
19.1.1 脚本语言特征
19.1.2 Lua脚本语言
19.1.3 脚本所需的架构
19.2 运行时脚本语言的功能
19.2.1 对原生编程语言的接口
19.2.1.1 Lua C接口
19.2.2 游戏对象句柄
19.2.2.1 Lua函数调用与定义
19.2.2.2 类对象及注册表
19.2.2.3 tolua
19.2.2.4 调用游戏对象方法
19.2.3 在脚本中接收及处理事件
19.2.3.1 通信机制
19.2.3.2 向宿主程序注册Lua函数地址
19.2.3.3 在宿主程序中调用Lua函数
19.2.3.4 更好的组件脚本架构
19.2.4 发送事件
19.2.5 面向对象脚本语言
19.3 Lua Binding
19.3.1 生成绑定代码
19.3.2 在程序中使用绑定代码
19.3.3 自定义绑定
19.4 在Lua中使用Genius-x
19.4.1 配置环境
19.4.2 创建Component脚本
19.4.3 创建System脚本
19.4.4 其他接口
19.5 总结
更新:本书将涵盖Cocos2d-x 3.1的内容,最新的着色器相关章节已经根据3.1的重构的GLProgramState修改,参见第9章的目录,同时新增一章在lua中使用数据驱动架构的章节
- OpenGL ES着色程序
9.1 顶点和顶点数组
9.1.1 图元与顶点
9.1.2 顶点属性状态
9.1.3 顶点数组
9.1.3.1 顶点数组数据结构
9.1.3.2 在顶点着色器中定义顶点属性
9.1.3.3 顶点属性的绑定
9.1.3.4 顶点数组的传输
9.2. 缓冲对象
9.2.1 顶点数组缓冲对象(VBO)
9.2.2 索引数组缓冲对象
9.2.3 使用VAO缓存顶点数组状态
9.3 着色器程序
9.3.1 着色器字符串
9.3.2 着色器的加载和编译
9.3.3 着色器程序对象
9.4 Cocos2d-x着色器子系统
9.4.1 GLProgramState与Node之间的关系
9.4.2 GLProgramState
9.4.2.1 设置顶点属性
9.3.4.4 设置全局属性
9.4.3 着色器程序的使用过程
9.4.4 GLProgramState的管理
9.4.5 GLProgramState的限制
9.5 顶点着色器
9.5.1 输入参数
9.5.2 顶点坐标
9.5.3 输出参数
9.6 片段着色器
9.6.1 输入参数
9.6.2 纹理采样
9.6.3 输出参数
9.7 着色器程序编辑工具
9.8 示例
9.8.1 使用ETC压缩纹理
9.8.2 动态设置着色器参数
9.10 总结
《我所理解的Cocos2d-x3.0》新书即将交稿,现邀请一些热心的朋友,从即日起至6月20日的每个周末花半天时间,与作者一起深入高效的学习Cocos2d-x3.0,你将能够提前阅读所有内容,并在出版之后得到一本赠书,每次限10个名额,不管你是新手还是高手,真诚地希望听到你的建议!
凡是参与本次活动审稿的朋友名字将出现在书籍感谢名单中,非常感谢大家的关注和支持!
感兴趣的朋友请跟我联系,QQ:497642003 或者直接留言
中文名:我所理解的Cocos2d-x
English name:What I learned from Cocos2d-x
目录
- 全新的Cocos2d-x 3.0(The new Cocos2d-x 3.0)
1.1 Cocos2d-x 3.0的历史意义
1.1.1 回归C++风格
1.1.2 更灵活的渲染架构
1.1.3 脱离Cocos2d-iPhone更自由地发展
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.6.1 Map<K,V>的性能
1.2.6.2 与Cocos2d-x内存管理的结合
1.2.6.3 移动语义
1.2.7 其他
1.3 Cocos2d-x引擎展望
1.3.1 3D
1.3.2 Cocos Code IDE
1.4 总结 - Hello, Cocos2d-x
(64,windows) - Cocos2d-x架构一瞥
3.1 Cocos2d-x架构总览
3.2 Cocos2d-x内存管理机制
3.2.1 C++显式堆内存管理
3.2.2 C++11中的智能指针
3.2.3 为什么不使用C ++11智能指针
3.2.4 垃圾回收机制
3.2.5 Cocos2d-x内存管理机制
3.2.5.1 引用计数
3.2.5.2 autorelease声明一个“智能指针”
3.2.5.3 AutoreleasePool队列
3.2.6 Cocos2d-x中的智能指针
3.2.6.1 构造函数
3.2.6.2 赋值操作符
3.2.6.3 弱引用赋值
3.2.6.4 其他操作
3.2.6.5 Ref与容器
3.2.6.6 RefPtr与自动回收池的比较
3.2.6.7 RefPtr的缺陷
3.2.7 我该怎样进行内存管理
3.3 UI树及运行时游戏对象
3.3.1 位置与变换
3.3.2 坐标系
3.3.2.1 世界坐标系
3.3.2.2 本地坐标系
3.3.2.3 坐标变换
3.3.3 UI树
3.3.3.1 UI树的遍历
3.3.3.2 逻辑深度
3.3.3.3 模型视图变换矩阵
3.3.3.4 运行时游戏对象
3.3.3.5 UI元素与内存管理
3.4 应用程序架构
3.4.1 游戏生命周期
3.4.2 窗口尺寸
3.4.3 场景管理
3.4.4 游戏循环
3.5 实时更新游戏对象
3.5.1 帧率
3.5.2 Scheduler
3.5.3 时间线
3.5.4 逻辑更新优先级
3.5.5 性能问题
3.6 Cocos2d-x主线程
3.6.1 在主线程执行异步处理结果
3.6.2 文件异步加载完成
3.6.3 异步处理的单元测试
3.7 总结 - OpenGL ES 2.0概览
4.1 图形处理器简介
4.2 什么是OpenGL ES
4.3 OpenGL ES 2.0绘图管线
4.2.1 顶点数组
4.2.2 顶点着色器
4.2.3 图元装配
4.2.4 光栅化
4.2.5 片段着色器
4.2.6 片段测试
4.4 绘图管线中的并行计算
4.5 构建高性能的渲染引擎
4.6 帧缓冲
4.7 总结 - 全新的绘制系统
5.1 新绘制系统的特点
5.2 绘制系统概览
5.3 RenderCommand
5.4 RenderQueue
5.5 GroupCommand
GroupCommand的添加
5.6 render方法
5.6.1 RenderCommand的排序
5.6.2 QuadCommand
5.6.2.1 自动批绘制
5.7 元素可见性
5.7.1 visible属性
5.8 绘制的时机
5.9 示例:自定义绘制
5.10 总结 - 纹理
6.1 光栅化
6.1.1 多重采样
6.1.2 纹理坐标
6.2 像素矩形
6.2.1 像素存储模式
6.2.2 纹理数据的传输
6.2.3 解包
6.3 客户端图像格式
6.3.1 纹理格式对应关系
6.3.2 图像数据格式转换
6.4 纹理对象和加载纹理
6.5 纹理单元与多重纹理
6.6 纹理的缩放
6.6.1 纹理的缩小
6.6.2 纹理的放大
6.6.3 在Cocos2d-x中设置过滤模式
6.7 多级纹理
6.7.1 多级纹理过滤模式
6.7.2 多级纹理的上传
6.7.3 多级纹理的生成
6.8 压缩纹理
6.8.1 压缩纹理的特点
6.8.2 压缩纹理的实现
6.8.3 在Cocos2d-x中使用压缩纹理
6.8.4 PVRTC和PVRTC2
6.8.5 ECT
6.8.6 针对不同平台使用不同的压缩纹理
6.9 纹理缓存管理
6.8.1 纹理的生命周期
6.8.2 用TextureCache来管理纹理
6.8.3 场景过渡中的资源管理
6.8.3.1 基于引用计数的资源管理
6.8.3.2 更好的场景过渡资源管理
6.8.4 Android下的纹理恢复处理
6.10 纹理所占内存大小
6.11 使用纹理最佳实践
6.11.1 硬件层面
6.11.2 使用层面
6.11.3 资源层面
6.12 总结 - 精灵
7.1 Sprite绘制一个矩形区域
7.1.1 V3F_C4B_T2F_Quad结构体
7.1.2 Sprite使用QuadCommand进行绘制
7.1.3 Sprite作为子元素
7.2 Sprite的绘制属性
7.2.1 混合模式
7.2.1.1 源,目标和缓冲区
7.2.1.2 混合计算
7.2.1.3 混合与深度测试
7.2.2 颜色叠加
7.2.2.1 Node的颜色叠加
7.2.2.2 精灵的颜色叠加
7.3 Alpha预乘
7.4 精灵表
7.4.1 精灵动画
7.5 批绘制,还是自动批绘制?
7.5.1 SpriteBatchNode
7.5.2 TextureAtlas
7.5.3 SpriteBatchNode的特点和限制
7.6 精灵的拉伸:九宫格
7.7 总结 - OpenGL ES着色器语言
8.1 概览
8.2 基础类型
8.2.1 空类型
8.2.2 布尔类型
8.2.3 整形
8.2.4 浮点型
8.2.5 向量
8.2.6 矩阵
8.2.7 采样器
8.2.8 结构体
8.2.9 数组
8.3 存储限定符
8.3.1 默认限定符
8.3.2 常量限定符
8.3.3 属性限定符
8.3.4 全局限定符
8.3.5 易变量限定符
8.4 构造器
8.4.1 标量的转换构造
8.4.2 向量和矩阵构造器
8.4.3 结构体构造器
8.5 矢量的分量
8.6 矩阵的分量
8.7 结构体和成员
8.8 矢量和矩阵操作符
8.9 总结 - OpenGL ES着色程序
9.1 顶点和顶点数组
9.1.1 图元与顶点
9.1.2 顶点属性状态
9.1.3 顶点数组
9.1.3.1 顶点数组数据结构
9.1.3.2 在顶点着色器中定义顶点属性
9.1.3.3 顶点属性的绑定
9.1.3.4 顶点数组的传输
9.2. 缓冲对象
9.2.1 顶点数组缓冲对象(VBO)
9.2.2 索引数组缓冲对象
9.2.3 使用VAO缓存顶点数组状态
9.3 着色器程序
9.3.1 着色器字符串
9.3.2 着色器的加载和编译
9.3.3 着色器程序对象
9.4 Cocos2d-x着色器子系统
9.4.1 GLProgramState与Node之间的关系
9.4.2 GLProgramState
9.4.2.1 设置顶点属性
9.3.4.4 设置全局属性
9.4.3 着色器程序的使用过程
9.4.4 GLProgramState的管理
9.4.5 GLProgramState的限制
9.5 顶点着色器
9.5.1 输入参数
9.5.2 顶点坐标
9.5.3 输出参数
9.6 片段着色器
9.6.1 输入参数
9.6.2 纹理采样
9.6.3 输出参数
9.7 着色器程序编辑工具
9.8 示例
9.8.1 使用ETC压缩纹理
9.8.2 动态设置着色器参数
9.10 总结 -
帧缓冲roupCommand
10.1 分组绘制
10.1.1 使用GroupCommand的流程
10.1.2 GroupCommand的限制
10.2 帧缓冲
10.2.1 绑定和管理帧缓冲
10.2.2 将图像附加到帧缓冲
10.2.3 渲染缓冲对象
10.2.4 将渲染缓冲对象附加到帧缓冲
10.2.5 将纹理附加到帧缓冲
10.2.6 帧缓冲完成状态
10.2.6.1 附加点完成状态
10.2.6.2 帧缓冲完成状态
10.2.6.3 完成状态对帧缓冲操作的影响
10.3 RenderTexture
10.3.1 初始化
10.3.1.1 设置绘制区域
10.3.2 RenderTexture的绘制
10.3.3 ReadPixels
10.3 4 RenderTexture的限制及用途
10.4 总结
11.片段操作
11.1 片段操作简述
11.2 逻辑缓冲区
11.2.1 位平面
11.2.2 按位计算
11.3 片段测试
11.3.1 模板测试
11.3.2 深度测试
11.3.3 模板测试的步骤
11.3.4 片段测试的用途
11.3.4.1 深度测试的用途
11.3.4.2 模板测试的用途
11.4 全缓冲区操作
11.4.1 控制帧缓冲区的更新
11.4.2 清理缓冲区
11.5 ClippingNode
11.5.1 ClippingNode的绘制流程
11.5.2 ClippingNode的模板测试分析
11.6 总结
12. 多分辨率支持
12.1 概述
12.2 设计分辨率
12.2.1 缩放策略
12.2.2 调整元素的位置
12.2.3 几个有用的变量
12.2.4 使用屏幕分辨率
12.2.5 视口设置
12.2.6 什么时候缩放了
12.3 资源分辨率
12.3.1 资源分辨率的设置
12.3.2 真实分辨率InPixels
12.3.3 什么时候缩放资源
12.4 总结
13. 事件分发
13.1 概述
13.1.1 什么是事件
13.1.2 事件的工作机制
13.1.3 事件系统的特点
13.2 订阅者
13.2.1 事件类型
13.2.2 注册与管理订阅者
13.2.2.1 注册订阅者
13.2.2.2 删除订阅者
13.2.2.3 修改订阅者
13.3 事件分发
13.3.1 订阅者的排序
13.3.1.1 Node订阅者的排序
13.3.2 嵌套事件
13.3.3 在事件分发中修改订阅者
13.3.4 停止分发事件
13.4 事件与Node
13.4.1 暂停与恢复
13.4.2 删除订阅者
13.5 触摸事件
13.5.1 EventListenerTouchAllAtOnce
13.5.2 EventListenerTouchOneByOne
13.5.3 单点与多点触摸之间的关系
13.5.4 触摸点的位置判断
13.6 其他
13.6.1 其他操作系统事件
13.6.2 EventCustom
13.6.3 内存管理
13.6.4 回调与返回值
13.6.5 单元测试
13.6.6 其他事件
13.7 总结
14. 关于字体
14.1 计算机字体的历史
14.2轮廓字形概述
14.2.1 点
14.2.2 轮廓
14.2.3 轮廓的方向
14.2.4 轮廓的交叉
14.2.5 混合轮廓字形
14.2.6 字形格子
14.3 FreeType字体引擎
14.3.1 字体文件及字形索引
14.3.2 字符度量
14.3.3 FreeType字形解析过程
14.3.4 FreeType字形装载
14.3.4.1 FT_Library类
14.3.4.2 FT_Face类
14.3.4.3 FT_Size类
14.3.4.4 FT_GlyphSlot类
14.3.4.5 FT_CharMap类
14.4 FontAtlas
14.4.1 Font
14.4.1.1 FontFreeType
14.4.1.2 FontFNT
14.4.1.3 FontCharMap
14.4.2 FontAtlasCache
14.5 Label
14.5.1 通用属性
14.5.1.1 几种尺寸
14.5.1.2 对齐方式
14.5.1.3 行高和字间距
14.5.1.4 字符精灵
14.5.2 Font字符集
14.5.3 轮廓字体的缩放
14.5.3.1 Distance Field
14.5.4 特效
14.5.4.1 阴影
14.5.4.2 描边
14.5.4.3 发光
14.6 使用字体的最佳实践
- 动画系统
15.1 概述
15.1.1 动画的优先级
15.2 线性插值
15.2.1 标量插值
15.2.2 矢量插值
15.2.3 变换矩阵插值
15.2.4 插值在动画系统中的运用
15.2.4.1 Action是低阶动画系统
15.3 给元素添加动画
15.3.1 Action是一个自描述的对象
15.3.2 在Node上执行动画
15.3.2.1 取消正在执行的动画
15.3.2.2 动画完成时回调
15.3.2.3 命名动画
15.3.3 控制动画的动画
15.3.3.1 Sequence
15.3.3.2 Spawn
15.3.3.3 Repeat和RepeatForever
15.4 动画系统架构
15.4.1 Speed
15.4.2 缓动函数
15.4.3 自定义动画-精灵闪白
15.5 总结
-
碰撞与物理引擎
16.1 概述
16.1.1 物理引擎
16.2 碰撞检测系统
16.2.1 刚体
16.2.1.1 刚体分类
16.2.1.2 形状
16.2.2 接触与碰撞
16.2.2.1 刚体和形状的类别
16.2.2.2 接触掩码
16.2.2.3 碰撞掩码
16.2.2.4 接触回调
16.2.2.5 碰撞过滤总结
16.2.3 碰撞查询
16.3 刚体动力学
16.3.1 控制刚体的运动
16.3.2 碰撞响应
16.3.2.1 冲量碰撞响应
16.3.2.2 摩擦力
16.3.2.3 环境阻力
16.3.2.4 休眠
16.3.3 约束
16.4 整合物理引擎
16.4.1 刚体与可视对象
16.4.1.1 物理驱动的刚体
16.4.1.2 游戏驱动的刚体
16.4.2 物理世界
16.4.2.1 参数配置
16.4.3 游戏循环阶段
16.5 预处理与工具
16.6 总结 -
运行时游戏对象模型
17.1 概述
17.2 运行时游戏对象模型
17.2.1 以对象为中心的架构
17.2.1.1 复杂的层次结构
17.2.1.2 分类学瓶颈
17.2.1.3 多重继承
17.2.1.4 冒泡效应
17.2.1.5 无止境地重构
17.2.2 组件模型
17.2.2.1 把继承改为合成
17.2.2.2 组件的创建及拥有权
17.2.3 以属性为中心的架构
17.2.3.1. 通过属性类实现
17.2.3.2 通过脚本实现
17.2.3.3. 以属性为中心设计的优缺点
17.3 Entity Component System
17.3.1 属性结构
17.3.2 分离数据与行为
17.3.3 数据驱动
17.3.3.1. 属性值
17.3.3.2 对象结构
17.3.3.3 事件脚本
17.4 游戏对象查询
17.4.1 根据唯一标识符查询
17.4.2 根据类型查询
17.4.2.1 面向类型编程
17.4.3 游戏对象数据库
17.5 实时更新游戏对象
17.5.1 更新的性能限制
17.5.2 更新的时序
17.5.2.1 批次更新
17.5.2.2 桶式更新
17.6 总结 -
Genius-x开源框架
18.1 Genius-x是什么
18.1.1 Genius-x架构一览
18.1.2 Genius-x项目结构及使用
18.2 游戏对象模型
18.2.1 Entity
18.2.1.1 唯一标识符
18.2.1.2 对象的创建
18.2.1.3 对象的销毁
18.2.1.4 交通枢纽
18.2.2 Component
18.2.2.1 组件类型
18.2.2.2 组件包含数据
18.2.2.3 数据解析
18.2.2.4 向游戏对象添加组件
18.2.2.5 数据定义
18.2.3 System
18.2.3.1 System实例
18.2.3.2 构造函数
18.2.3.3 自动附加
18.2.3.4 生命周期
18.2.3.5 状态更新
18.2.3.6 事件及组件间通信
18.2.4 ECSManager
18.2.4.1 注册组件
18.2.4.2 ECSManager实例
18.2.4.3 更新组件
18.2.4.4 递归性
18.2.5 数据驱动
18.2.5.1 数据驱动的流程
18.2.5.2 一个典型的数据驱动实例
18.2.5.3 事件驱动
18.2.6 NodeCom
18.2.6.1 可视组件
18.2.6.2 可视组件的绘制
18.2.6.3 移除可视组件
18.2.6.4 唯一入口
18.2.7 层级结构
18.3 数据格式,加载及串流
18.3.1 数据格式
18.3.1.1 ResourceDataDelegate是一个解析器
18.3.1.2 ResourceDataDelegate是一个数据类
18.3.1.3 注册数据类
18.3.2 文件加载,管理
18.3.3 游戏世界串流
18.3.3.1 引用计数管理
18.3.3.2 统一的资源入口
18.4 游戏通用系统
18.5 共享组件
18.6 示例
18.7 总结
19 脚本
19.1 脚本的概念
19.1.1 脚本语言特征
19.1.2 Lua脚本语言
19.1.3 脚本所需的架构
19.2 运行时脚本语言的功能
19.2.1 对原生编程语言的接口
19.2.1.1 Lua C接口
19.2.2 游戏对象句柄
19.2.2.1 Lua函数调用与定义
19.2.2.2 类对象及注册表
19.2.2.3 tolua
19.2.2.4 调用游戏对象方法
19.2.3 在脚本中接收及处理事件
19.2.3.1 通信机制
19.2.3.2 向宿主程序注册Lua函数地址
19.2.3.3 在宿主程序中调用Lua函数
19.2.3.4 更好的组件脚本架构
19.2.4 发送事件
19.2.5 面向对象脚本语言
19.3 Lua Binding
19.3.1 生成绑定代码
19.3.2 在程序中使用绑定代码
19.3.3 自定义绑定
19.4 在Lua中使用Genius-x
19.4.1 配置环境
19.4.2 创建Component脚本
19.4.3 创建System脚本
19.4.4 其他接口
19.5 总结




