《精通Cocos2d-x游戏开发》分成《基础卷》和《进阶卷》两册。这两册都是有确立的创作目地。《基础卷》致力于Cocos2d-x模块基础,着眼于让Cocos2d-x新手变成一个基础扎扎实实、可靠的程序员。《进阶卷》致力于各种各样实用技术,是创作者很多年开发工作经验的结晶体,书里的技术性点大多数是以具体工作上遇到的难题提炼出而成的,从难题的实质考虑到解决困难的构思,出示了多种多样解决方法,并比照各计划方案的优点和缺点,启迪阅读者思索。
这书为《精通Cocos2d-x游戏开发》的《进阶卷》,共36章,分成4篇。第1篇为“实用技术篇”,主要内容有加密解密、增减升级、像素兼容、调节方法、Shader动画特效、剪裁蒙版、游戏引擎、骨骼动画、CocoStudio*实践活动等实用技术。第二篇为“Lua篇”,主要内容有Lua的基础专业知识、Lua的table与面向对象编程、C/C与Lua的通讯、Cocos2d-x原生态Lua架构与Quick-Cocos2d-xLua架构等。第三篇为“互联网篇”,主要内容有互联网基础、selectIO重复使用、Socket和Libcurl等基础专业知识,及其弱连接网络、强连接网络、局域网络等网游的手机客户端和服务器端开发。第四篇为“混合开发篇”,主要内容有Android和iOS服务平台的开发和装包专业知识,及其怎么使用AnySDK迅速连接第三方SDK。
这书合适应用Cocos2d-x开展游戏开发的高级阅读者阅读文章,特别是在合适在应用Cocos2d-x开发全过程中碰到困难的程序员,及其期待学习培训一些实用技术,进而丰富多彩本身工作经验的程序员。针对公办专科学校的学员和社会发展培训机构的学生,这书也是一本难能可贵的学习培训实例教程。
目录
- 第1篇 实用技术篇
- 第1章 文件读写
- 1.1 使用UserDefault
- 1.2 读写XML文件
- 1.2.1 XML格式简介
- 1.2.2 使用TinyXML读取XML
- 1.2.3 使用TinyXML写入XML
- 1.3 读写Plist文件
- 1.3.1 Plist格式简介
- 1.3.2 读写Plist文件
- 1.4 读取CSV文件
- 1.4.1 解析CSV
- 1.4.2 描述复杂结构
- 1.5 读写二进制文件
- 第2章 加密解密
- 2.1 加密解密基础
- 2.1.1 公钥/私钥与非对称加密
- 2.1.2 信息摘要与数字签名
- 2.1.3 数字证书
- 2.2 防止内存修改
- 2.3 对资源的加密解密
- 2.3.1 使用TexturePacker加密纹理
- 2.3.2 对Lua脚本进行加密
- 2.3.3 自定义Lua脚本加密解密
- 2.3.4 自定义图片加密解密
- 2.4 使用加固工具
- 2.4.1 360加固保加固步骤
- 2.4.2 Android应用签名
- 第3章 增量更新
- 3.1 使用AssetsManagerEx
- 3.2 搭建增量更新服务器
- 3.3 Manifest文件详解
- 3.4 AssetsManagerEx内部实现流程简析
- 3.5 自动打包工具
- 第4章 声音与音效
- 4.1 选择音频格式
- 4.2 使用SimpleAudioEngine
- 4.3 使用AudioEngine
- 4.4 声音音效相关的经验和技巧
- 第5章 分辨率适配
- 5.1 Cocos2d-x适配策略
- 5.1.1 分辨率适配策略
- 5.1.2 坐标编码
- 5.1.3 OpenGL窗口与可视化窗口
- 5.1.4 setDesignResolutionSize详解
- 5.2 分辨率适配经验
- 5.2.1 宽度或高度锁定
- 5.2.2 计算设计分辨率
- 5.2.3 场景固定内容
- 5.2.4 经验小结
- 5.3 CocoStudio分辨率适配
- 第6章 CocoStudio最佳实践
- 6.1 高效创建CSB
- 6.1.1 简单方案
- 6.1.2 缓存方案
- 6.1.3 克隆方案
- 6.2 异步加载CSB
- 6.3 高效播放CSB动画
- 第7章 调试Cocos2d-x
- 7.1 控制台调试
- 7.2 使用KxDebuger调试Cocos2d-x
- 第8章 调试技巧总结
- 8.1 初级调试技巧
- 8.1.1 基础操作
- 8.1.2 启动调试
- 8.1.3 条件断点
- 8.1.4 监视技巧
- 8.2 高级调试技巧
- 8.2.1 远程调试
- 8.2.2 coredump调试
- 8.2.3 使用Bugly捕获崩溃堆栈
- 8.2.4 命中断点
- 8.2.5 数据断点
- 8.2.6 即时窗口
- 8.2.7 多线程调试
- 8.2.8 性能调试
- 8.3 记一次内存泄漏调试
- 8.3.1 内存泄漏表象
- 8.3.2 初步分析
- 8.3.3 排查问题
- 8.3.4 修改代码定位泄漏点
- 8.3.5 开始调试
- 第9章 物理引擎——Box2d基础
- 9.1 核心概念
- 9.2 工作流程
- 9.3 物理世界World
- 9.4 Body和Shape
- 9.4.1 刚体的碰撞
- 9.4.2 创建刚体
- 9.5 关节Joint
- 9.5.1 使用关节
- 9.5.2 旋转关节RevoluteJoint
- 9.5.3 平移关节PrismaticJoint
- 9.5.4 距离关节DistanceJoint
- 9.5.5 滑轮关节PulleyJoint
- 9.5.6 鼠标关节MouseJoint
- 9.5.7 齿轮关节GearJoint
- 9.5.8 滚轮关节WheelJoint
- 9.5.9 焊接关节WeldJoint
- 9.5.10 摩擦关节FrictionJoint
- 9.5.11 绳索关节RopeJoint
- 第10章 物理引擎——应用到Cocos2d-x
- 10.1 物体的运动
- 10.1.1 施加力和冲量
- 10.1.2 角力矩和角冲量
- 10.2 碰撞检测
- 10.2.1 碰撞监听
- 10.2.2 碰撞过滤
- 10.3 Box2d的调试渲染
- 10.4 在Cocos2d-x中使用Box2d
- 10.4.1 物理世界
- 10.4.2 物理Sprite
- 10.4.3 碰撞处理
- 10.5 Box2d的相关工具
- 10.5.1 PhysicsEditor介绍
- 10.5.2 BoxCAD介绍
- 10.5.3 Physics Body Editor介绍
- 10.5.4 Vertex Helper介绍
- 第11章 图元渲染
- 11.1 使用DrawingPrimitives接口绘制图元
- 11.1.1 如何绘制图元
- 11.1.2 半透明效果
- 11.1.3 抗锯齿
- 11.2 使用DrawNode绘制图元
- 11.3 渲染接口详解
- 11.3.1 绘制点
- 11.3.2 绘制线段、矩形、多边形与圆形
- 11.3.3 绘制贝塞尔曲线
- 11.3.4 绘制CardinalSpline
- 11.3.5 绘制凯特摩曲线
- 11.3.6 绘制实心图元
- 11.4 小结
- 第12章 Spine骨骼动画
- 12.1 Spine功能简介
- 12.2 Spine结构
- 12.3 使用Spine
- 12.3.1 加载Spine
- 12.3.2 播放动画
- 12.3.3 动画回调
- 12.3.4 显示控制
- 12.4 Spine高级技巧
- 12.4.1 混合动画
- 12.4.2 缓存Spine骨骼动画
- 12.4.3 异步加载Spine骨骼
- 12.4.4 Spine的性能优化
- 第13章 2D、3D粒子特效
- 13.1 2D粒子特效
- 13.1.1 粒子系统简介
- 13.1.2 手动创建粒子系统
- 13.1.3 使用Cocos2d-x内置的粒子系统
- 13.1.4 使用Plist文件加载粒子系统
- 13.1.5 操作粒子系统
- 13.2 2D粒子系统运行流程
- 13.2.1 流程简介
- 13.2.2 粒子的更新和渲染
- 13.3 3D粒子特效
- 13.3.1 组件系统
- 13.3.2 Particle Universe支持的组件
- 13.4 使用Particle Universe粒子系统
- 13.4.1 使用PUParticleSystem3D
- 13.4.2 PUParticleSystem3D相关接口
- 13.5 3D粒子系统源码简析
- 13.5.1 ParticleSystem3D结构
- 13.5.2 初始化流程
- 第14章 裁剪与遮罩
- 14.1 片段测试
- 14.1.1 裁剪测试
- 14.1.2 Alpha测试
- 14.1.3 模板测试
- 14.1.4 深度测试
- 14.2 裁剪
- 14.2.1 使用ClippingRectangleNode
- 14.2.2 ClippingRectangleNode的实现
- 14.3 遮罩
- 14.3.1 ScrollViewDemo示例
- 14.3.2 HoleDemo示例
- 14.3.3 详解HoleDemo示例
- 14.3.4 ClippingNode的实现
- 第15章 使用Shader——GLSL基础
- 15.1 Shader简介
- 15.2 图形渲染管线
- 15.2.1 顶点处理器
- 15.2.2 片段处理器
- 15.2.3 插值计算
- 15.3 GLSL基础语法
- 15.3.1 数据类型和变量
- 15.3.2 操作符
- 15.3.3 变量修饰符、统一变量和属性变量
- 15.3.4 易变变量
- 15.3.5 语句与函数
- 15.3.6 Shader简单示例
- 15.4 在OpenGL中使用Shader
- 15.4.1 在OpenGL中创建Shader
- 15.4.2 属性变量
- 15.4.3 统一变量
- 15.4.4 错误处理
- 15.4.5 清理工作
- 15.5 在Cocos2d-x中使用Shader
- 15.5.1 Cocos2d-x的Shader架构
- 15.5.2 Cocos2d-x内置Shader规则
- 15.5.3 编写Shader
- 15.5.4 使用Shader的步骤
- 第16章 使用Shader——常用特效
- 16.1 Blur模糊效果
- 16.2 OutLine描边效果
- 16.3 RGB、HSV与HSL效果
- 16.4 调整色相
- 16.5 流光效果
- 第2篇 Lua篇
- 第17章 Lua基础概述
- 17.1 类型与值
- 17.2 操作符
- 17.2.1 算术操作符
- 17.2.2 关系操作符
- 17.2.3 逻辑操作符
- 17.2.4 其他操作符
- 17.3 语句
- 17.3.1 赋值语句
- 17.3.2 语句块
- 17.3.3 条件语句
- 17.3.4 循环语句
- 17.4 函数
- 17.4.1 定义函数
- 17.4.2 调用函数
- 17.4.3 函数参数
- 17.4.4 尾调用
- 17.5 闭包与泛型for
- 17.5.1 闭包
- 17.5.2 泛型for
- 第18章 Lua——table
- 18.1 使用table
- 18.1.1 创建table
- 18.1.2 访问table
- 18.1.3 修改table
- 18.1.4 删除table
- 18.1.5 遍历table
- 18.2 元表metatable
- 18.2.1 元方法
- 18.2.2 算术、关系与连接元方法
- 18.2.3 特殊的元方法
- 18.2.4 __index元方法
- 18.2.5 __newindex元方法
- 18.2.6 __mode元方法
- 18.3 packages介绍
- 18.3.1 require()方法
- 18.3.2 编写模块
- 18.4 面向对象
- 18.4.1 定义类
- 18.4.2 实例化
- 18.4.3 继承
- 18.5 table库
- 18.5.1 插入
- 18.5.2 排序
- 18.5.3 pack()和unpack()方法
- 18.5.4 table长度
- 第19章 Lua与C的通信
- 19.1 准备工作
- 19.1.1 头文件与链接库
- 19.1.2 lua_State指针
- 19.1.3 堆栈
- 19.1.4 压入堆栈
- 19.1.5 访问堆栈
- 19.1.6 堆栈的其他操作
- 19.2 操作table
- 19.2.1 如何将table传入Lua
- 19.2.2 如何获取Lua返回的table
- 19.3 C/C 中调用Lua
- 19.3.1 执行Lua片段
- 19.3.2 执行Lua脚本文件
- 19.3.3 调用Lua函数
- 19.4 注册C/C 函数给Lua调用
- 19.5 将C 的类传给Lua
- 第20章 Cocos2d-x原生Lua框架详解
- 20.1 Cocos2d-x原生Lua框架结构
- 20.1.1 Lua核心层
- 20.1.2 Lua脚本引擎
- 20.1.3 Cocos2d-x到Lua的转换层
- 20.1.4 Lua辅助层
- 20.2 使用Cocos2d-x原生Lua框架
- 20.2.1 在Cocos2d-x中调用Lua
- 20.2.2 在Lua中操作Cocos2d-x
- 20.3 Cocos2d-x原生Lua框架运行流程
- 20.3.1 LuaEngine初始化流程
- 20.3.2 加载Lua脚本
- 20.3.3 Cocos2d-x到Lua的事件分发
- 20.3.4 Lua辅助层初始化流程
- 20.3.5 Lua辅助层的实用工具
- 20.4 使用genbindings.py导出自定义类
- 20.4.1 各个平台的环境搭建
- 20.4.2 编写要导出的C 的类
- 20.4.3 编写ini配置文件
- 20.4.4 修改并执行genbindings.py
- 20.4.5 注册并在Lua中使用
- 20.5 扩展Cocos2d-x Lua
- 20.5.1 编写扩展方法
- 20.5.2 注册到类中
- 20.6 lua-tests导读
- 第21章 Cocos2d-x Quick框架详解
- 21.1 Quick简介
- 21.2 Quick框架结构
- 21.3 使用Quick
- 21.3.1 创建Quick项目
- 21.3.2 第一个Quick程序
- 21.3.3 开发工具
- 21.4 Quick运行流程分析
- 21.4.1 初始化流程
- 21.4.2 MVC框架运行流程
- 21.5 Quick脚本框架详解
- 21.5.1 Quick脚本框架整体结构
- 21.5.2 Quick框架基础模块
- 21.5.3 Quick脚本框架初始化流程
- 第22章 Quick框架实践——MVC框架
- 22.1 组件系统详解
- 22.1.1 EventProtocol事件组件
- 22.1.2 StateMachine状态机组件
- 22.2 ModelBase详解
- 22.3 MVC示例详解
- 22.3.1 代码结构简介
- 22.3.2 启动流程详解
- 22.3.3 发射子弹
- 22.3.4 命中目标
- 22.4 小结
- 第3篇 网络篇
- 第23章 网络游戏——网游开发概述
- 23.1 弱联网游戏
- 23.2 强联网游戏
- 23.3 局域网游戏
- 第24章 弱联网游戏——Cocos2d-x客户端实现
- 24.1 客户端请求流程
- 24.2 Libcurl easy接口详解
- 24.2.1 关于请求链接
- 24.2.2 关于Post提交表单
- 24.2.3 关于读写
- 24.3 使用多线程执行请求
- 第25章 弱联网游戏——PHP服务器实现... 362
- 25.1 环境搭建... 362
- 25.1.1 安装PHP. 362
- 25.1.2 安装Nginx. 363
- 25.1.3 安装MySQL. 363
- 25.1.4 启动服务... 364
- 25.2 编写PHP. 365
- 25.2.1 基本语法... 365
- 25.2.2 表单处理... 366
- 25.2.3 操作MySQL. 366
- 25.3 实现签到服务... 366
- 第26章 强联网游戏——TCP和Socket 369
- 26.1 Socket接口与TCP. 369
- 26.1.1 TCP服务器与客户端交互流程... 370
- 26.1.2 Socket API 详解... 372
- 26.1.3 Windows Socket API详解... 376
- 26.2 简单的TCP服务器端与客户端... 376
- 26.2.1 TCP服务器实现... 377
- 26.2.2 TCP客户端实现... 379
- 26.3 非阻塞Socket与select()函数... 380
- 26.3.1 非阻塞Socket 380
- 26.3.2 select()函数的使用... 380
- 26.3.3 调整TCP服务器为Select模型... 382
- 26.4 半包粘包... 384
- 26.4.1 什么是半包粘包... 384
- 26.4.2 处理半包粘包... 385
- 26.5 心跳与超时... 387
- 26.5.1 TCP的死连接... 388
- 26.5.2 检测死连接... 389
- 第27章 强联网游戏——单机版动作游戏... 390
- 27.1 需求分析与类设计... 390
- 27.2 创建工程和场景... 393
- 27.3 添加实体... 396
- 27.4 实体显示组件... 399
- 27.5 消息定义... 400
- 27.6 添加SingleProxy. 401
- 27.7 游戏的主逻辑... 402
- 第28章 强联网游戏——C 服务器实现... 404
- 28.1 服务端需求分析... 404
- 28.2 kxServer的使用... 404
- 28.3 NetDemoServer服务器... 405
- 28.4 接收客户端请求... 409
- 28.5 移植前端代码... 412
- 28.6 梳理流程和总结... 412
- 第29章 网络游戏——前后端网络同步... 414
- 29.1 整理入口场景... 414
- 29.2 连接服务器... 416
- 29.3 添加OnlineProxy. 416
- 29.4 打包与恢复场景... 418
- 29.5 实时同步... 419
- 第30章 局域网游戏——使用UDP. 423
- 30.1 使用UDP. 423
- 30.2 UDP通信流程... 424
- 30.2.1 sendto()函数... 424
- 30.2.2 recvfrom()函数... 425
- 30.3 UDP广播... 425
- 30.3.1 什么是网络号和主机号... 426
- 30.3.2 A类、B类、C类地址与广播地址... 426
- 30.3.3 什么是子网和子网掩码... 426
- 30.3.4 本地网络的定义是什么... 427
- 30.3.5 发送广播... 427
- 30.4 简单的UDP服务器... 428
- 30.5 简单的UDP客户端... 429
- 第31章 局域网游戏——建立、搜索、加入房间... 430
- 31.1 建立房间... 430
- 31.2 移植后端代码... 432
- 31.3 搜索房间... 434
- 第4篇 跨平台篇
- 第32章 Android环境搭建... 440
- 32.1 Android环境搭建基础... 440
- 32.1.1 JDK和JRE. 440
- 32.1.2 关于ADK. 442
- 32.1.3 关于NDK. 443
- 32.2 使用Eclipse打包... 443
- 32.2.1 打开Android项目... 443
- 32.2.2 解决Java报错... 444
- 32.2.3 设置NDK. 448
- 32.2.4 解决打包报错... 450
- 32.2.5 解决运行报错... 451
- 32.3 使用Android Studio打包... 453
- 32.3.1 cocos compile命令... 453
- 32.3.2 编译打包Android Studio. 454
- 32.3.3 打包遇到的问题... 455
- 32.4 新建Android项目... 456
- 32.5 实用技巧... 458
- 32.5.1 关于版本问题... 458
- 32.5.2 关于减少包体积... 459
- 第33章 使用JNI实现C 与Java互调... 461
- 33.1 Android基本概念... 461
- 33.1.1 Activity简介... 461
- 33.1.2 Intent简介... 463
- 33.1.3 资源与R.java. 463
- 33.1.4 AndroidManifest.xml简介... 463
- 33.2 Hello JNI项目... 463
- 33.2.1 使用Eclipse创建项目... 463
- 33.2.2 使用Android Studio创建项目... 465
- 33.3 编写JNI的C 代码... 467
- 33.3.1 为Eclipse添加Android.mk和hello.c. 467
- 33.3.2 在Android Studio下编写JNI 468
- 33.3.3 C 的函数原型... 471
- 33.3.4 C 调用Java. 472
- 33.4 Java调用C . 473
- 33.5 在C 程序中使用Java. 474
- 33.6 在Cocos2d-x中实现Java和C 的互调... 479
- 33.6.1 Cocos2d-x的JNI初始化... 480
- 33.6.2 在Cocos2d-x中调用Java. 480
- 33.6.3 在Java中调用Cocos2d-x. 481
- 33.7 Android.mk和Application.mk详解... 481
- 33.7.1 认识Android.mk. 481
- 33.7.2 用Android.mk添加源文件以及指定头文件目录... 482
- 33.7.3 在Android.mk中引用其他模块(第三方库)... 482
- 33.7.4 Android.mk的一些变量和函数... 484
- 33.7.5 关于Application.mk. 484
- 33.8 ABI详解... 485
- 33.8.1 常见的ABI 485
- 33.8.2 如何选择ABI 485
- 33.8.3 如何生成对应ABI的so. 486
- 33.9 调试JNI代码... 486
- 33.9.1 Android Studio JNI 调试环境搭建... 487
- 33.9.2 Android Studio 的断点调试... 490
- 第34章 iOS环境搭建与真机调试... 492
- 34.1 iOS环境搭建... 492
- 34.1.1 环境搭建... 492
- 34.1.2 Windows移植iOS. 493
- 34.2 iOS证书... 494
- 34.2.1 Mac的证书... 495
- 34.2.2 注册开发者... 495
- 34.2.3 如何获得证书... 495
- 34.2.4 创建证书... 496
- 34.2.5 关于证书密钥... 498
- 34.3 iOS真机调试... 500
- 34.3.1 无证书调试... 500
- 34.3.2 使用证书调试... 502
- 34.4 打包IPA. 505
- 34.4.1 正确设置签名证书与授权文件... 505
- 34.4.2 使用Xcode打包... 506
- 34.4.3 其他打包方式... 509
- 第35章 Objective-C与C 互调... 511
- 35.1 Objective-C基础语法... 511
- 35.1.1 Objective-C的一些特性... 511
- 35.1.2 Objective-C的类... 512
- 35.2 Objective-C与C 混编... 514
- 第36章 接入AnySDK. 515
- 36.1 AnySDK概述... 515
- 36.1.1 为什么要接入AnySDK. 515
- 36.1.2 AnySDK架构简介... 516
- 36.1.3 AnySDK快速接入指引... 517
- 36.2 接入AnySDK Android框架... 520
- 36.2.1 导入Android AnySDK Framework. 521
- 36.2.2 初始化AnySDK Framework. 522
- 36.3 接入AnySDK iOS 框架... 526
- 36.3.1 导入AnySDK Framework. 527
- 36.3.2 初始化AnySDK Framework. 530
- 36.4 登录流程... 531
- 36.4.1 登录流程简介... 531
- 36.4.2 客户端接入登录... 532
- 36.4.3 服务端接入登录... 534
- 36.5 支付流程... 536
- 36.5.1 支付流程... 536
- 36.5.2 客户端接入支付... 537
- 36.5.3 服务端接入支付... 539
- 36.6 母包联调... 540
- 36.6.1 调试登录... 540
- 36.6.2 调试支付... 541
- 36.7 打包工具... 542
- 36.8 小结... 543