第1 章 欢迎来到HTML5 的世界 11.1 什么是HTML5 11.2 HTML5 的前世今生 31.3 W3C 与WHATWG 工作组 41.4 令人称赞的Canvas 与WebGL 51.4.1 Canvas 51.4.2 WebGL 51.5 何为HTML5 游戏 61.5.1 从技术角度出发 61.5.2 从非技术角度出发 61.6 HTML5 游戏的特点与痛点 61.6.1 特点 71.6.2 痛点 81.7 HTML5 游戏的当下与未来 91.7.1 产品研发阶段 91.7.2 测试上线运营阶段 121.7.3 未来 131.8 小结 13第2 章 奇妙的前端之旅 142.1 JavaScript 的苦与痛 142.2 伟大的ECMAScript 标准 152.2.1 ECMAScript 标准是什么 152.2.2 历史 152.2.3 版本 162.3 JavaScript 的代替品:Dart、CoffeeScript、TypeScript 162.3.1 Dart 162.3.2 CoffeeScript 172.3.3 TypeScript 172.4 初出茅庐的WebAssembly 182.4.1 WebAssembly 是什么 182.4.2 asm.js 182.5 HTML5 游戏开发利器——游戏引擎 182.6 一个神器:Egret Runtime 192.6.1 什么是Egret Runtime 192.6.2 为什么要用 Egret Runtime 192.7 小结 21第3 章 Hello Egret 223.1 Egret 引擎简介 223.1.1 Egret 引擎的特点 223.1.2 Egret 引擎的主要功能 233.1.3 Egret 引擎的应用案例 243.2 搭建开发环境 253.2.1 Egret 引擎版本的选择 253.2.2 Egret Wing:强大的IDE 工具 313.2.3 ResDepot:资源管理工具 333.2.4 Texture Merger:资源打包工具 333.3 Hello World 343.3.1 创建第一个项目 343.3.2 运行项目 363.3.3 修改一下,成为自己的Hello World373.4 Hello World 分析 383.4.1 项目源代码目录 383.4.2 项目配置文件 383.4.3 项目运行库 393.4.4 项目编译目录 393.4.5 项目资源目录 403.4.6 项目发布目录 403.5 库与代码风格 413.5.1 Egret 引擎的代码风格 413.5.2 核心库与扩展库的使用方法 423.5.3 第三方库的集成方法 423.6 命令行模式详解 453.6.1 创建项目 453.6.2 编译项目 453.6.3 运行项目 463.6.4 发布项目 473.6.5 了解更多 473.7 小结 48第4 章 游戏的基础知识 494.1 显示对象 494.1.1 什么是显示对象 494.1.2 坐标系 514.1.3 显示对象的种类 574.1.4 显示列表 58目录4.2 显示对象的架构 584.2.1 容器与非容器 584.2.2 DisplayObject 类与DisplayObjectContainer 类 624.2.3 Sprite 与Shape 624.3 Shape 矢量图 674.3.1 绘制矩形 684.3.2 清空绘图 704.3.3 绘制圆形 704.3.4 绘制直线 724.3.5 绘制曲线 744.3.6 绘制圆弧 764.3.7 多个形状的绘制 774.4 显示列表与容器类 794.4.1 关于显示容器 794.4.2 添加与删除显示对象 814.4.3 显示对象操作的注意点 834.5 遮罩与碰撞检测 874.5.1 遮罩的使用 874.5.2 非精确碰撞检测 914.5.3 精确碰撞检测 924.5.4 包围盒碰撞 944.6 混合模式 964.6.1 NORMAL 模式 964.6.2 ADD 模式 994.6.3 ERASE 模式 1024.7 小结 103第5 章 事件与用户交互 1045.1 事件消息机制 1045.1.1 事件处理机制的原理 1045.1.2 第一个事件处理的例子 1055.1.3 事件流机制 1055.2 事件 1075.2.1 事件类 1075.2.2 自定义事件 1105.3 侦听器 1105.3.1 创建侦听器 1105.3.2 注册侦听器与移除侦听器 1125.3.3 侦听器中的this 1125.4 事件的优先级 1135.5 自定义事件发送类 1145.5.1 继承EventDispatcher 1145.5.2 复合EventDispatcher 1145.5.3 实现IEventDispatcher 接口 1155.6 触摸事件 1175.6.1 触摸事件类型 1175.6.2 开启touchEnable 1175.7 实践:同色点点看 1185.8 小结 125第6 章 游戏资源管理 1266.1 RES 资源加载模块 1266.2 资源配置文件 1276.3 加载资源配置文件 1296.3.1 外部文件 1296.3.2 直接读取 1306.3.3 对比说明 1306.4 预加载资源组 1316.5 动态创建资源组 1326.6 读取资源文件 1336.7 资源的缓存机制 1356.8 释放资源 1366.9 内置文件类型解析器 1366.9.1 配置九宫格参数 1366.9.2 配置声音资源 1386.9.3 读取解析二进制文件 1386.10 扩展资源文件类型解析器 1396.11 小结 139第7 章 位图操作 1407.1 创建位图 1407.1.1 认识位图 1407.1.2 位图格式 1407.1.3 位图来源 1417.1.4 位图加载 1417.1.5 位图显示 1417.2 操作纹理集 1427.2.1 从RES 中获取纹理 1427.2.2 SpriteSheet 纹理集类 1427.3 纹理填充方式 1457.3.1 位图填充拉伸以填充区域 1467.3.2 重复位图以填充区域 1467.4 位图的九宫格 1477.4.1 缘起 1477.4.2 九宫格原理 1487.4.3 代码中使用九宫格 1487.4.4 通过ResDepot 设置九宫格 1497.5 滤镜 1517.5.1 滤镜可用性及WebGL 开关 1517.5.2 发光滤镜 1527.5.3 投影滤镜 1537.5.4 颜色矩阵滤镜 154目录VII7.5.5 模糊滤镜 1567.5.6 设置滤镜品质 1577.5.7 滤镜使用优化技巧 1577.6 实践:《抓间谍》 1587.6.1 游戏设计稿 1587.6.2 准备素材 1587.6.3 编写代码 1587.7 小结 162第8 章 文本 1638.1 普通文本 1638.1.1 创建普通文本 1638.1.2 设置文本样式 1688.1.3 字体的设置 1708.1.4 多样式混合文本 1728.1.5 设置文本超链接 1758.2 输入文本 1778.2.1 创建可输入文本 1778.2.2 设置输入文本样式 1788.3 位图文本 1798.3.1 创建位图文本字体 1798.3.2 位图文本的使用 1818.4 实践:游戏登录和活动公告板 1838.5 小结 192第9 章 动画与粒子特效 1939.1 逐帧动画 1939.1.1 逐帧动画简介 1939.1.2 动画素材制作方法 1949.1.3 创建一个逐帧动画 1989.1.4 播放和暂停动画 2029.1.5 跳转动画 2029.1.6 动态切换动画数据 2029.1.7 动画的缓存机制 2039.1.8 动画数据详解 2039.2 缓动动画 2069.2.1 Tween 缓动动画 2069.2.2 缓动的基本用法 2079.2.3 缓动对象的基本控制参数 2089.2.4 缓动对象的缓动变化事件 2089.2.5 缓动过程参数设定 2089.2.6 缓动对象的其他方法 2089.3 粒子特效 2099.3.1 粒子系统简介 2099.3.2 粒子系统使用 2109.3.3 自定义粒子特效 2119.4 小结 212第10 章 音乐与音效 21410.1 声音类 21410.1.1 egret.Sound 类 21410.1.2 使用声音类 21510.2 音频控制类 21810.2.1 播放 21810.2.2 音量 21810.2.3 暂停 21810.3 声音事件 22210.4 音乐与音效类型设置 22510.5 小结 226第11 章 数据操作 22711.1 JSON 数据操作 22711.1.1 JSON 数据格式简介 22711.1.2 为什么使用JSON 数据格式 22811.1.3 在Egret 中加载JSON 数据 22911.1.4 在Egret 中操作JSON 数据 22911.2 二进制数据操作 23011.2.1 读取二进制数据对象 23011.2.2 写入字节流 23011.2.3 定位字节流指针 23111.2.4 读取字节流 23111.2.5 大端模式与小端模式 23211.3 实践:仿《找你妹》游戏 23311.3.1 游戏策划案 23311.3.2 准备资源 23411.3.3 编写代码 23511.4 小结 240第12 章 网络通信 24112.1 HTTP 网络请求 24112.1.1 构建简单的网络请求 24112.1.2 POST 与 GET 请求 24212.1.3 发送带有数据的网络请求 24412.1.4 检测网络请求状态 24712.2 WebSocket 通信 24712.2.1 创建WebSocket 连接 24812.2.2 发送数据 24912.2.3 读取数据 24912.2.4 WebSocket 的网络状态 25012.2.5 断开与重连服务器 25112.3 实践:游戏中的聊天室 25112.4 小结 259第13 章 计时器与心跳控制器 26013.1 Timer 26013.1.1 创建计时器 26013.1.2 加入计时器事件侦听 26013.1.3 启动计时器 26113.1.4 修改计时器时间间隔 26113.1.5 修改计时器 26113.2 Ticker 26213.2.1 Ticker 与Timer 的不同 26213.2.2 开启心跳侦听 26213.2.3 移除心跳侦听 26313.2.4 Ticker 的最新用法 26313.3 setTimeout 与clearTimeout 26413.4 getTimer 26513.5 《抓间谍》和《找你妹》 26513.5.1 《抓间谍》 26513.5.2 《找你妹》 26713.6 小结 268第14 章 反射机制与依赖注入 27014.1 反射机制 27014.1.1 什么是反射机制 27014.1.2 getDefinitionByName 方法 27414.1.3 获取运行时对象类型 27514.1.4 检查域内定义 27614.2 依赖注入 27714.2.1 什么是依赖注入 27714.2.2 Injector 注入器 27814.2.3 注入器的应用场景 28114.3 小结 281第15 章 屏幕适配与环境交互 28215.1 4 种屏幕适配策略 28215.1.1 设置屏幕适配策略 28215.1.2 exactFit 模式 28315.1.3 noScale 模式 28315.1.4 showAll 模式 28415.1.5 fixedWidth 模式和fixedHeight 模式 28515.1.6 noBorder 模式 28615.1.7 在程序内设置缩放模式 28615.2 屏幕方向设置 28615.2.1 竖屏模式 28715.2.2 横屏模式 28815.2.3 反向横屏模式 28815.2.4 自动模式 28915.3 环境交互 28915.3.1 Egret 与网页JavaScript 交互 28915.3.2 读取网页GET 参数 29015.4 小结 290第16 章 调试与性能检测 29116.1 TypeScript 断点调试 29116.2 日志输出1