描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111619246
本书使用微软*的TypeScript语言,以面向接口及泛型的编程方式,采用HTML 5中的Canvas2D绘图API,实现了一个2D动画精灵系统,并在该精灵系统上演示了精心设计的与图形数学变换相关的Demo。通过阅读本书,读者可以系统地掌握TypeScript语言、面向接口和泛型的编程方式、Canvas2D
API绘图、图形数学(向量、点与基本形体的碰撞检测、矩阵及贝塞尔曲线)、数据结构(队列、栈、树)及重要的设计模式。
本书共10章,分为4篇。第1篇TypeScript篇,主要介绍了如何构建TypeScript开发、编译和调试环境,以及如何使用TypeScript实现Doom 3词法解析器;第2篇Canvas2D篇,主要介绍了动画与Application类,以及如何使用Canvas2D绘图;第3篇图形数学篇,主要介绍了坐标系变换、向量数学及基本形体的点选、矩阵数学及贝塞尔曲线;第4篇架构与实现篇,主要介绍了精灵系统、优美典雅的树结构及场景图系统。
本书内容丰富,讲解由浅入深,特别适合对图形、游戏和UI开发感兴趣的读者阅读,也适合需要系统学习图形开发技术的人员阅读。另外,本书还适合JavaScript程序员及想从C/C 、Java、C#等语言转HTML 5开发的程序员阅读。编程爱好者、高校学生及培训机构的学员也可以将本书作为兴趣读物。
资深:凝聚作者15年图形编程经验,带领读者探索图形编程的知识
系统:用TypeScript语言实现一个基于享元模式的场景图精灵框架
图解:使用Canvas2D渲染API,绘制出各种图形变换几何原理图
广泛:涉及词法解析、设计模式、图形变换、渲染状态机、序列化和反序列化等内容
独特:精讲55个实例,帮助读者理解图形编程中的相关数学知识
实用:涉及动画、UI和游戏等领域,并承上启下,作为3D图形技术的基础
本书核心内容:
构建TypeScript开发、编译和调试环境
使用TypeScript实现Doom3词法解析器
动画与Application类
使用Canvas2D绘图
Canvas2D坐标系变换
向量数学及基本形体的点选
矩阵数学及贝塞尔曲线
精灵系统
优美典雅的树结构
场景图系统
7位重量级大咖力荐:
中国工业设计研究院西南中心院长
覃霁
上海灵禅网络科技股份有限公司CEO 兰海文
上海凯英网络科技有限公司副总裁
何鑫
成都手领科技有限公司创始人兼CTO、迷雾侦探/AI-LIMIT游戏技术负责人 张锐
《全局光照技术》作者
秦春林
《Go语言从入门到进阶实战》作者、慕课网讲师、资深全栈游戏开发者 徐波
(限于篇幅要求,从第3章开始只给出了二级目录,完整的三级目录请阅读图书)
第1篇 TypeScript篇
第1章 构建TypeScript开发、编译和调试环境 2
1.1 TypeScript简介 2
1.2 安装TypeScript开发环境 3
1.2.1 安装Node.js 3
1.2.2 安装VS Code 4
1.2.3 NPM全局安装TypeScript 6
1.2.4 第一个TypeScript程序 7
1.3 使用TypeScript编译(转译)器 13
1.3.1 生成tsconfig.json文件 13
1.3.2 解决生成tsconfig.json文件后带来的常见问题 13
1.3.3 自动编译TypeScript文件 15
1.4 模块化开发TypeScript 15
1.4.1 tsconfig.json文件中的target和module命令选项 16
1.4.2 编写Canvas2D类导出给main.ts调用 16
1.4.3 使用lite-server搭建本地服务器 17
1.5 使用SystemJS自动编译加载TypeScript 18
1.5.1 NPM本地安装TypeScript库和SystemJS库 18
1.5.2 SystemJS直接编译TypeScript源码 19
1.6 使用VS Code调试TypeScript源码 20
1.6.1 安装及配置Debugger for Chrome扩展 20
1.6.2 VS Code中单步调试TypeScript 20
1.7 本章总结 22
第2章 使用TypeScript实现 Doom 3词法解析器 24
2.1 Token与Tokenizer 24
2.1.1 Doom3文本文件格式 26
2.1.2 使用IDoom3Token与IDoom3Tokenizer接口 26
2.1.3 ES 6中的模板字符串 28
2.1.4 IDoom3Token与IDoom3Tokenizer接口的定义 29
2.2 IDoom3Token与IDoom3Tokenizer接口的实现 30
2.2.1 Doom3Token类成员变量的声明 30
2.2.2 Doom3Token类变量初始化的问题 31
2.2.3 IDoom3Token接口方法的实现 32
2.2.4 Doom3Token类的非接口方法实现 33
2.2.5 Doom3Tokenzier处理数字和空白符 34
2.2.6 IDoom3Tokenizer接口方法实现 34
2.2.7 Doom3Tokenizer字符处理私有方法 35
2.2.8 核心的getNextToken方法 36
2.2.9 跳过不需处理的空白符和注释 37
2.2.10 实现_getNumber方法解析数字类型 38
2.2.11 实现_getSubstring方法解析子字符串 40
2.2.12 实现_getString方法解析字符串 41
2.2.13 IDoom3Tokenizer词法解析器状态总结 42
2.3 使用工厂模式和迭代器模式 43
2.3.1 微软COM中创建接口的方式 43
2.3.2 Doom3Factory工厂类 43
2.3.3 迭代器模式 44
2.3.4 模拟微软.NetFramework中的泛型迭代器 44
2.3.5 IDoom3Tokenizer扩展 IEnumerator接口 45
2.3.6 修改Doom3Tokenizer源码 45
2.3.7 使用VS Code中的重命名重构方法 46
2.3.8 使用迭代器解析Token 46
2.3.9 面向接口与面向对象编程的个人感悟 47
2.4 从服务器获取资源 47
2.4.1 HTML加载本地资源遇到的问题 48
2.4.2 从服务器加载资源 48
2.4.3 使用XHR向服务器请求资源文件 49
2.4.4 TypeScript中的类型别名 50
2.4.5 使用doGet请求文本文件并解析 51
2.4.6 解决仍有空白字符输出问题 52
2.4.7 实现doGetAsync异步请求方法 52
2.4.8 声明TypeScript中的回调函数 54
2.4.9 调用回调函数 55
2.5 本章总结 57
第2篇 Canvas2D篇
第3章 动画与Application类 60
3.1 requestAnimationFrame方法与动画 60
3.2 Application类及其子类 67
3.3 测试及修正Application类 80
3.4 为Application类增加计时器功能 90
3.5 本章总结 96
第4章 使用Canvas2D绘图 98
4.1 绘制基本几何体 98
4.2 绘制文本 117
4.3 绘制图像 130
4.4 绘制阴影 141
4.5 本章总结 142
第3篇 图形数学篇
第5章 Canvas2D坐标系变换 146
5.1 局部坐标系变换 146
5.2 坦克Demo 173
5.3 本章总结 190
第6章 向量数学及基本形体的点选 192
6.1 向量数学 192
6.2 向量投影Demo 203
6.3 点与基本几何形体的碰撞检测算法 211
6.4 附录:图示代码 217
6.5 本章总结 222
第7章 矩阵数学及贝塞尔曲线 223
7.1 矩阵数学 223
7.2 贝塞尔曲线 245
7.3 本章总结 257
第4篇 架构与实现篇
第8章 精灵系统 260
8.1 精灵系统的架构与接口 260
8.2 实现非场景图类型精灵系统 268
8.3 IShape形体系统 275
8.4 精灵系统测试Demo 290
8.5 本章总结 296
第9章 优美典雅的树结构 298
9.1 树的数据结构 298
9.2 树数据结构的遍历 308
9.3 树数据结构的序列化与反序列化 327
9.4 队列与栈的实现 331
9.5 本章总结 332
第10章 场景图系统 334
10.1 实现场景图精灵系统 334
10.2 骨骼层次精灵Demo 348
10.3 坦克沿贝塞尔路径运动Demo 357
10.4 让精灵系统支持裁剪操作 370
10.5 本章总结 372
……
本书使用最新的TypeScript语言,以面向接口及泛型的编程方式,采用HTML 5中的Canvas2D绘图API,实现了一个2D动画精灵系统,并在该精灵系统上演示了精心设计的与图形数学变换相关的Demo。该精灵系统是一个具备最小运行环境(更新、重绘、裁剪,以及事件分发和响应),并支持精确点选(点与点、线段、矩形、圆形、椭圆、三角形及凸多边形),采取了享元设计模式,基于场景图管理且兼容非场景图类型,而且易于扩展的系统。
本书有何特色
1.全程使用TypeScript面向接口的编程语言
本书通过TypeScript语言提供的面向接口编程功能实现了:
* Doom3引擎中文本格式的词法解析器接口;
* 接口一致,且使用了树结构管理(场景图)和线性结构管理(非场景图)的精灵系统,并且能够让场景图类型的精灵系统兼容运行非场景图类型的精灵系统。
2.剖析Canvas2D的底层原理
本书中的Canvas2D相关章节实现了如下几个重要例子:
* 模拟了Canvas2D中的渲染状态堆栈和矩阵变换堆栈,并且在实例中使用自己的矩阵变换堆栈来运行相关例子;
* 实现了类似于Canvas2D文本绘制的各种对齐算法;
* 实现了加强版的drawImage方法,使其支持repeat/repeat-x/repeat-y填充模式的算法(类似于Canvsas2D中的图案填充),并且使用加强版的drawImage实现了九宫格缩放算法(Scale9Grid)。
3.详解图形数学及点与基本几何形体的碰撞检测算法
图形编程的最大“拦路虎”是涉及图形数学变换。书中以图形数学变换为核心实现了以下例子:
* 将平移、缩放和旋转的不同顺序组合绘制出来;
* 通过绘制各种轨迹来观察和理解物体原点变换的奥秘所在;
* 贝塞尔曲线原理动画;
* 坦克方向正确地朝着鼠标指针位置移动(三角函数版);
* 坦克方向正确地朝着鼠标指针位置移动(使用向量缩放来避免使用sin / cos三角函数);
* 坦克方向正确地朝着鼠标指针位置移动(使用从两个方向以向量构建的旋转矩阵来避免使用三角函数atan2,并且用自己实现的矩阵堆栈来替换Canvas2D中的矩阵堆栈);
* 坦克沿着多条贝塞尔曲线围成的封闭路径朝向正确地运动;
* 点投影到向量上的动画效果(涉及向量的所有操作);
* 使用鼠标精确点选旋转中的精灵(测试点与线段、矩形、圆形、椭圆、三角形,以及凸多边形碰撞检测算法及凸多边形判断算法);
* 太阳系模拟动画;
* 骨骼层次精灵动画。
4.提供了几何原理图的生成源代码
本书图形数学相关章节中的几何原理图都是使用Canvas2D直接绘制出来的,并提供了绘制源代码。主要有如下图示:
* 向量方向与大小概念图示;
* 向量的加减法图示;
* 负向量图示;
* 向量与标量乘法图示;
* 向量点乘图示;
* 点与三角形关系图示;
* 凹多边形、凸多边形及三角形扇形化图示;
* 旋转矩阵推导图示。
5.精准地使用设计模式
本书中用到的设计模式如下:
* 使用工厂模式生产各种接口(精灵系统的精灵ISprite和所有基本形体IShape都是由SpriteFactory制造生产的);
* 使用迭代器模式抽象所有具有迭代功能的类或接口(IDoom3Tokenizer、贝塞尔曲线迭代器、树结构深度优先和广度优先的8个线性遍历迭代器);
* 使用模板方法设计模式(Application类通过模板方法模式规定了整个入口类的运行流程);
* 使用适配器模式(在树结构中为了统一线性遍历算法,将队列和栈数据结构适配成一致的操作接口);
* 使用享元设计模式(实现的精灵系统使用享元模式,多个精灵可以共享同一个形体,但是可以有不同的渲染状态、大小、位置和方向等)。
6.详尽地描述了树的数据结构要点
本书专门用一章来介绍树的数据结构,并且详尽地描述了树结构的各种重要算法。
* 基于队列的广度优先方式的4种非递归遍历算法(先根、后根、从左到右、从右到左);
* 基于栈的深度优先方式的4种非递归遍历算法;
* 基于“父亲 儿子”数组方式的深度优先的4种递归遍历算法;
* 基于“父亲 儿子兄弟”方式的深度优先的4种递归遍历算法;
* 基于“父亲 儿子兄弟”方式的深度优先的非递归遍历算法;
* 基于JSON的序列化和反序列化算法。
7.提供完善的技术支持和售后服务
本书提供了专门的售后服务邮箱[email protected]。读者在阅读本书的过程中若有疑问,可以通过该邮箱获得帮助。
本书内容及知识体系
第1篇 TypeScript篇(第1、2章)
第1章构建TypeScript开发、编译和调试环境,主要介绍了TypeScript语言的开发、编译和调试环境的搭建,最终形成一个支持源码自动编译、模块自动载入、服务器端热部署及具有强大断点调试功能的TypeScript快捷开发环境。
第2章使用TypeScript实现词法解析器,用TypeScript语言,以面向接口的方式实现了一个Doom3(原id Software公司毁灭战士3游戏引擎)词法解析器;并在此基础上实现了工厂和迭代器两种设计模式,使其支持接口的生成及使用迭代方式进行Token解析输出;同时封装了XMLHttpRequest类,用来支持从服务器端下载要解析的文件。本章还系统地介绍了后续章节中要用到的一些TypeScript常用的语法知识。
第2篇 Canvas2D篇(第3、4章)
第3章动画与Application类,详细介绍了requestAnimationFrame方法与屏幕刷新频率之间的关系;并在此基础上封装了一个支持基于时间的刷新、重绘,以及事件的分发和处理的Application类;还实现了能正确处理CSS盒模型的坐标变换功能;最后添加了支持不同帧率运行的计时器,模拟了setTimeout和setInterval方法的实现。
第4章使用Canvas2D绘图,主要介绍了Canvas2D中矢量图形、文本、图像及阴影绘制的相关内容,实现了一个本章及后续章节都要使用的基于Canvas2D的演示和测试环境。本章需要读者重点关注渲染状态堆栈的实现原理,以及各种文本对齐方式的算法和支持Repeat模式的drawImage实现等内容。
第3篇 图形数学篇(第5~7章)
第5章Canvas2D坐标系变换是本书的精华,通过多个例子演示了Canvas2D中局部坐标系变换的相关知识点,让读者知道变换顺序的重要性,理解变换及掌握原点变换的几种方式;并且通过太阳自转和月亮自公转的例子,介绍了Canvas2D中矩阵堆栈层次变换的用法;最后通过一个坦克跟随鼠标指针朝向正确地运动Demo,深入讲解了一些常用三角函数的应用。
第6章向量数学及基本形体的点选,首先讲述了向量的一些基本操作,然后通过向量的加法和缩放操作替换第5章坦克Demo中使用的sin/cos函数。为了演示向量的一些基本操作,特意实现了点投影到向量的动画效果Demo;给出了点与线段、圆、矩形、椭圆、三角形及凸多边形等基本形体之间的碰撞检测算法;最后给出了本章所有几何图示的生成源代码,便于读者更加深入地理解向量各个操作背后的几何含义。
第7章矩阵数学及贝塞尔曲线,首先讲述了矩阵的相关知识,重点推导了旋转矩阵;然后将第5章中的坦克Demo用矩阵方式重写,演示如何通过两个单位向量构建旋转矩阵,从而消除对atan2函数的使用;接着模拟了Canvas2D中的矩阵堆栈,并用自己实现的矩阵堆栈重写坦克Demo;最后介绍了贝塞尔曲线多项式的推导过程,并实现了一个曲线动画的Demo。
第4篇 架构与实现篇(第8~10章)
第8章精灵系统,以面向接口编程的方式实现了一个精灵系统,并在该系统上实现了一个Demo,用来测试系统的点与各个基本形体之间的精确碰撞检测。该系统具有必要的功能(更新、绘制、鼠标和键盘事件的分发与响应),使用了非场景图类型,支持精确点选,基于保留模式,并采用了享元设计模式。
第9章优美典雅的树结构,主要介绍了树结构的增、删、改、查,以及各种遍历算法,最后实现了树结构的JSON序列化和反序列化算法。本章重在灵活应用TypeScript泛型编程,涉及不少泛型编程的细节。
第10章场景图系统,融合前面章节所讲知识,以面向接口的编程方式实现了一个精灵系统。该系统具有必要的功能(更新、重绘、裁剪及事件分发和响应),使用了场景图类型(建立在第9章的树结构上),支持精确点选,基于非立即渲染模式(保留模式),采用了享元设计模式,兼容运行第8章的非场景图类型。在此基础上,通过骨骼层次精灵动画,演示了场景图的层次变换功能及享元模式的优点;最后实现了坦克沿着贝塞尔路径朝向正确运行的Demo,以演示该精灵系统的综合特点。
本书配套资源获取方式
本书涉及的源代码文件和Demo需要读者自行下载。请登录华章公司网站www.hzbook.com,在该网站上搜索到本书,然后单击“资料下载”按钮即可在页面上找到“配书资源”下载链接。
运行书中的源代码需要进行以下操作:
(1)按照本书第1章中的介绍下载并安装Node.js和VS Code。
(2)在VS Code的终端对话框中输入npm install命令,自动下载运行依赖包。
(3)下载好依赖包后继续输入npm run dev即可自动运行Demo。
本书读者对象
* 对图形、游戏和UI开发感兴趣的技术人员;
* 想转行到图形开发领域的技术人员;
* 需要全面学习图形开发技术的人员;
* 想从C/C 、Java、C#、Objective-C等语言转HTML 5开发的技术人员;
* JavaScript程序员;
* 想学习TypeScript的程序员;
* 想提高编程水平的人员;
* 在校大学生及喜欢计算机编程的自学者;
* 专业培训机构的学员。
本书阅读建议
* 没有图形框架开发基础的读者,建议从第1章顺次阅读并演练每一个实例。
* 有一定图形开发基础的读者,可以根据实际情况有重点地选择阅读各个模块和项目案例。对于每一个模块和项目案例,先思考一下实现思路,然后阅读,效果更佳。
* 可以先阅读书中的模块和Demo,再结合配套源代码理解并调试,这样更加容易理解,而且也会理解得更加深刻。
本书作者
本书由步磊峰编写。感谢在本书编写和出版过程中给予了笔者大量帮助的各位编辑!
由于笔者水平所限,加之写作时间较为仓促,书中可能还存在一些疏漏和不足之处,敬请各位读者批评指正。
步磊峰
作者通过通俗易懂的讲解,将他十几年图形编程经验的精华浓缩至本书中。书中对TypeScript编程语言、2D图形及其数学基础都有较为全面的剖析,能够让广大读者较为系统地掌握HTML 5图形开发的核心技术。——上海灵禅网络科技股份有限公司CEO 兰海文
本书涉猎广泛,内容深刻,讲解深入浅出,囊括了TypeScript基本语法、图形渲染机制、图形学、数据结构、设计模式等内容,是一本不可多得的HTML 5图形开发书籍。——上海凯英网络科技有限公司副总裁 何鑫
本书带给读者全面的TypeScript语言讲解及Canvas2D绘图API开发案例,从而帮助读者构建出计算机图形学中数学变换的知识体系。对于热衷于图形学或游戏开发的相关读者而言,本书不仅是一本通俗易懂的TypeScript入门书,更是一本优秀的图形学工具书。——成都手领科技有限公司创始人兼CTO、迷雾侦探/AI-LIMIT游戏技术负责人 张锐
一本优秀的计算机图书,能够让读者从其文字中感受到作者的态度。相信读者也能够从本书中体会到作者多年来所坚持的技术钻研精神。——《全局光照技术》作者 秦春林
传统图形编程都是基于DirectX/OpenGL。而Web时代,HTML 5 Canvas2D/WebGL TypeScript的组合才是*的图形编程方案。作者以多年的实战经验编写了本书,让读者能够较为轻松地理解图形编程的奥秘和编写技巧。阅读本书后,不但能让老的图形程序员容光焕发,精神饱满,收获满满,而且也能让萌新程序员通过本书一览大佬庖丁解牛的风姿,从而获得巨大的提升。——《Go语言从入门到进阶实战》作者、慕课网讲师、资深全栈游戏开发者 徐波
评论
还没有评论。