HTML5 Canvas核心技术:图形、动画与游戏开发 pdf

HTML5 Canvas核心技术:图形、动画与游戏开发

内容简介

《HTML5 Canvas核心技术:图形、动画与游戏开发》是HTML5 Canvas领域的标杆之作,也是迄今为止该领域内容全面和深入的著作之一,是公认的经典、五星级书、技术专家David Geary新力作。它不仅全面讲解了canvas元素的API,以及如何利用Canvas进行图形绘制、动画制作、物理效果模拟、碰撞检测、游戏开发、移动应用开发,还包大量实例,可作性极强。

《HTML5 Canvas核心技术:图形、动画与游戏开发》共分11章。章介绍了canvas元素及如何在网络应用程序中使用它;2章深入研究了如何使用Canvas的API进行绘制;3章告诉读者如何绘制并作Canvas中的文本;4章专门讲解图像、图像的作及视频处理;5章介绍如何实现平滑的动画效果;6章讲解如何用语言来实现精灵;7章展示了如何在动画中模拟物理效果;8章介绍了进行碰撞检测所用的技术;9章以一个简单但是高效的游戏引擎开始,提供了游戏制作所需的支持功能;0章讨论了实现自定义控件的通用方法;1章专门讲述如何实现基于Canvas的手机应用程序。

作者简介

基瑞(David Geary),资深软件开发专家,擅长HTML5、CSS和等Web开发技术和Java技术。他是一位的作家,著有书《Graphic Java 2:Swing,Third Edition》(《Java 2图形设计卷2:Swing》,机械工业出版社,2000年出版)和《Core JavaServer TM Faces,Third Edition》(与Cay Horstmann合著,由Prentice Hall于2010年出版)。他还是一位的演讲者,是各种演讲活动的常客,曾三度获得“JavaOne Rock Star”荣誉称号,并于2011年同他人联合创立了HTML5 Denver Meetup Group。此外,他还是一位经验丰富的技术顾问,主要传授与网络应用开发相关的技术。

爱飞翔,资深软件开发工程师,擅长Web开发、移动开发和游戏开发,有10余年开发经验,曾主导和参与了多个手机游戏和手机软件项目的开发,经验十分丰富。他是手机软件开发引擎AgileMobileEngine的创始人兼项目经理,同时也是CatEngine手机游戏开发引擎的联合创始人兼代码维护员。他对极限编程、设计模式、重构、测试驱动开发、敏捷软件开发等也有较深入的研究,目前负责敏捷移动开发网的运营。业余爱好文学和历史,有的文学造诣。

目录

译者序
前言
章 基础知识
1.1 canvas元素
1.1.1 canvas元素的大小与绘图表面的大小
1.1.2 canvas元素的API
1.2 Canvas的绘图环境
1.2.1 2d绘图环境
1.2.2 Canvas状态的保存与恢复
1.3 本书程序清单的规范格式
1.4 开始学习HTML5
1.4.1 规范
1.4.2
1.4.3 控制台与调试器
1.4.4 性能
1.5 基本的绘制作
1.6 事件处理
1.6.1 鼠标事件
1.6.2 键盘事件
1.6.3 触摸事件
1.7 绘制表面的保存与恢复
1.8 在Canvas中使用HTML元素
1.9 打印Canvas的内容
1.10 离屏canvas
1.11 基础数学知识简介
1.11.1 求解代数方程
1.11.2 三角函数
1.11.3 向量运算
1.11.4 根据计量单位来推导等式
1.12 总结

2章 绘制
2.1 坐标系统
2.2 Canvas的绘制模型
2.3 矩形的绘制
2.4 颜与透明度
2.5 渐变与图案
2.5.1 渐变
2.5.2 图案
2.6 阴影
2.7 路径、描边与填充
2.7.1 路径与子路径
2.7.2 剪纸效果
2.8 线段
2.8.1 线段与像素边界
2.8.2 网格的绘制
2.8.3 坐标轴的绘制
2.8.4 橡皮筋式的线条绘制
2.8.5 虚线的绘制
2.8.6 通过扩展CanvasRenderingContext2D来绘制虚线
2.8.7 线段端点与连接点的绘制
2.9 圆弧与圆形的绘制
2.9.1 arc方法的用法
2.9.2 以橡皮筋式辅助线来协助用户画圆
2.9.3 arcTo方法的用法
2.9.4 刻度仪表盘的绘制
2.10 贝塞尔曲线
2.10.1 二次方贝塞尔曲线
2.10.2 三次方贝塞尔曲线
2.11 多边形的绘制
2.12 高级路径作
2.12.1 拖动多边形对象
2.12.2 编辑贝塞尔曲线
2.12.3 自动滚动网页,使某段路径所对应的元素显示在视窗中
2.13 坐标变换
2.13.1 坐标系的平移、缩放与旋转
2.13.2 自定义的坐标变换
2.14 图像合成
2.15 剪辑区域
2.15.1 通过剪辑区域来擦除图像
2.15.2 利用剪辑区域来制作伸缩式动画
2.16 总结

3章 文本
3.1 文本的描边与填充
3.2 设置字型属性
3.3 文本的定位
3.3.1 水平与垂直定位
3.3.2 将文本居中
3.3.3 文本的度量
3.3.4 绘制坐标轴旁边的文本标签
3.3.5 绘制数值仪表盘周围的文本标签
3.3.6 在圆弧周围绘制文本
3.4 实现文本编辑控件
3.4.1 指示文本输入位置的光标
3.4.2 在Canvas中编辑文本
3.4.3 文本段的编辑
3.5 总结

4章 图像与视频
4.1 图像的绘制
4.1.1 在Canvas之中绘制图像
4.1.2 drawImage()方法的用法
4.2 图像的缩放
4.3 将一个Canvas绘制到另一个Canvas之中
4.4 离屏canvas
4.5 作图像的像素
4.5.1 获取图像数据
4.5.2 修改图像数据
4.6 结合剪辑区域来绘制图像
4.7 以图像制作动画
4.8 图像绘制的安全问题
4.9 性能
4.9.1 对比drawImage(HTMLImage)、drawImage(HTMLCanvas)与putImageData()的绘图效率
4.9.2 在Canvas中绘制另一个Canvas与绘制普通图像之间的对比;在绘制时缩放图像与保持原样之间的对比
4.9.3 遍历图像数据
4.10 放大镜
4.10.1 使用离屏canvas
4.10.2 接受用户从文件系统中拖放进来的图像
4.11 视频处理
4.11.1 视频格式
4.11.2 在Canvas中播放视频
4.11.3 视频处理
4.12 总结

5章 动画
5.1 动画循环
5.1.1 通过requestAnimationFrame()方法让来自行决定帧速率
5.1.2 Inter Explorer对requestAnimationFrame()功能的实现
5.1.3 可移植于各平台的动画循环逻辑
5.2 帧速率的计算
5.3 以不同的帧速率来执行各种任务
5.4 恢复动画背景
5.4.1 利用剪辑区域来处理动画背景
5.4.2 利用图块复制技术来处理动画背景
5.5 利用双缓冲技术绘制动画
5.6 基于时间的运动
5.7 背景的滚动
5.8 视差动画
5.9 用户手势
5.10 定时动画
5.10.1 秒表
5.10.2 动画计时器
5.11 动画制作的佳指导原则
5.12 总结

6章 精灵
6.1 精灵概述
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 总结

7章 物理效果
7.1 重力
7.1.1 物体的下落
7.1.2 抛射体弹道运动
7.1.3 钟摆运动
7.2 时间轴扭曲
7.3 时间轴扭曲函数
7.4 时间轴扭曲运动
7.4.1 没有加速度的线
7.4.2 逐渐加速的缓入运动
7.4.3 逐渐减速的缓出运动
7.4.4 缓入缓出运动
7.4.5 弹簧运动与弹跳运动
7.5 以扭曲后的帧速率播放动画
7.6 总结

8章 碰撞检测
8.1 外接图形判别法
8.1.1 外接矩形判别法
8.1.2 外接圆判别法
8.2 碰到墙壁即被弹回的小球
8.3 光线投射法
8.4 分离轴定理(SAT)与小平移向量(MTV)
8.4.1 使用分割轴定理检测碰撞
8.4.2 根据小平移向量应对碰撞
8.5 总结

9章 游戏开发
9.1 游戏引擎
9.1.1 游戏循环
9.1.2 加载图像
9.1.3 同时播放多个声音
9.1.4 键盘事件
9.1.5 高分榜
9.1.6 游戏引擎源代码
9.2 游戏原型
9.2.1 游戏原型程序的HTML代码
9.2.2 原型程序的游戏循环
9.2.3 游戏原型程序的加载画面
9.2.4 暂停画面
9.2.5 按键监听器
9.2.6 游戏结束及高分榜
9.3 弹珠台游戏
9.3.1 游戏循环弹珠
9.3.2 弹珠精灵
9.3.3 重力与摩擦力
9.3.4 弹板的移动
9.3.5 处理键盘事件
9.3.6 碰撞检测
9.4 总结

0章 自定义控件
10.1 圆角矩形控件
10.2 进度条控件
10.3 滑动条控件
10.4 图像查看器控件
10.5 总结

1章 移动平台开发
11.1 移动设备的视窗
11.2 媒体特征查询技术
11.2.1 媒体特征查询与CSS
11.2.2 用程序应对媒体特征的变化
11.3 触摸事件
11.3.1 TouchEvent对象
11.3.2 TouchList对象
11.3.3 Touch对象
11.3.4 同时支持触摸事件与鼠标事件
11.3.5 手指缩放
11.4 iOS5
11.4.1 应用程序图标及启动画面
11.4.2 利用媒体特征查询技术设置iOS5系统的应用程序图标及启动画面
11.4.3 以不带饰件的全屏模式运行应用程序
11.4.4 应用程序的状态栏
11.5 虚拟键盘
11.6 总结

感悟与笔记

canvas元素

  1. 为了防止浏览器不支持canvas元素,我们设置“后备内容”(fallback content),下面紫色的字即为后备内容
    • <canvas id="canvas" width="600" height="300">您的浏览器不支持canvas,可以选择升级您的浏览器</canvas>
  2. 开发基于canvas的应用程序的最基本的几个操作
    1. 使用document.getElementById()方法获取到指向canvas的引用
    2. 在步骤1)中获取到的canvas对象上调用getContext("2d")方法,获取绘图环境变量(2d为小写)
    3. 使用第二步中获取到的绘图环境对象在canvas元素上进行绘制
  3. 关于canvas默认的一些属性
    1. canvas元素及其绘图表面的大小,默认为300×150像素
    2. 其背景色默认与其父元素的一致
    3. 在设置canvas宽度和高度的时候,不能使用px后缀,根据canvas规范,canvas元素的width和height取值只能是非负整数
    • tip:虽然支持canvas的浏览器都允许设定canvas元素的width和height的时候使用px后缀,但是根据canvas规范书,canvas元素的width和height属性只能是非负整数
  4. canvas元素的大小与绘图表面的大小
    • canvas元素有两套尺寸,一套是元素本身的大小,另外一套是元素绘图表面的大小。当在html中使用width和height属性修改canvas的大小或者使用js代码设置canvas元素的width和height的时候,其实不仅修改了canvas的大小,还修改了canvas绘图表面的大小,但是如果通过css来设置canvas的大小,就只会改变元素本身的大小,不会影响绘图表面的尺寸,当canvas元素的大小不符合其绘图表面的大小时,浏览器会自动对其绘图表面进行缩放,使其符合canvas元素的大小,这将导致奇怪,无用的效果
    • <!DOCTYPE html> 
      <html> 
      <head>
           
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
          <meta name="description" content="" />
          <meta name="keywords" content="" />
          <title>1</title> 
      </head>
      
      <body>
          <canvas id="canvas1"></canvas>    
          <canvas id="canvas2"></canvas>
          <div id="ca1"></div>
          <div id="ca2"></div>
          <style type="text/css">
                   #canvas1 { 
                      width:400px; 
                      height:300px; 
                      border:1px solid #000;
                  }
                  #canvas2 { 
                      border:1px solid #000;
                  }
          </style>
          <script>
              var canvas1=document.getElementById("canvas1");
              var ca1=document.getElementById("ca1");
              var context1=canvas1.getContext("2d");        
              context1.fillStyle="blue";
              context1.font="38px";
              context1.fillText("hello",100,100);
              var box1=canvas1.getBoundingClientRect();
              ca1.innerHTML="canvas默认的宽高是300×150<br/>CSS设置了canvas1的尺寸是400×300<br/>"+"canvas1的绘图表面的宽:"+canvas1.width+"  canvas1绘图表面的高:"+canvas1.height+"<br/>canvas1元素的宽:"+box1.width+"  canvas1元素的高:"+box1.height+"<br/>虽然canvas1绘图表面小于canvas1元素本身的大小,但是浏览器将绘图表面进行了缩放,所以hello字体也随之被拉伸";
              
              
              var canvas2=document.getElementById("canvas2");
              var ca2=document.getElementById("ca2");
              canvas2.width=400;
              canvas2.height=300;        
              var context2=canvas2.getContext("2d");        
              context2.fillStyle="blue";
              context2.font="38px";
              context2.fillText("hello",100,100);
              var box2=canvas2.getBoundingClientRect();
              ca2.innerHTML="canvas默认的宽高是300×150<br/>JS设置了canvas2的尺寸是400×300<br/>"+"canvas2的绘图表面的宽:"+canvas2.width+"  canvas2绘图表面的高:"+canvas2.height+"<br/>canvas2元素的宽:"+box2.width+"  canvas2元素的高:"+box2.height;
          </script>
      </body>
      </html>
    • 关于canvas元素本身的宽高和canvas绘图环境的宽高其实真的很重要,我在一个项目中,忘记设置了canvas绘图环境的高度,导致绘制出来的图形在y轴上被拉伸,还一直找不到原因,还以为是取的坐标不对,在各种调整y轴的坐标,无意中发现只设置了宽度没有设置高度,整整浪费了我两天的时间,所以如果发现所绘制的图形被拉伸变形了(除了使用drawImage的参数将其拉伸),那很有可能就是canvas绘图环境的宽高忘记了设置
  5. canvas元素的属性和方法
    • canvas主要的功能都是由其绘图环境提供的,所以canvas元素本身的属性和方法有限,只有两个属性和三个方法
      • 属性:width和height,设置canvas元素及其绘图表面的大小,不需要px
      • 方法:1)getContext方法获取与canvas相对应的环境对象
    • toDataURL(type,quality),返回一个数据地址(data URL),可以将其设置为img元素的src属性。
      • 第一个参数type指定图像的类型,例如image/jpeg,image/png,默认是image/png
      • 第二个参数是0-1.0的double值,表示图像的显示质量
    • toBlob(callback,type,quality)创建一个可以表示此canvas元素图像文件的Blob
      • 第一个参数callback是回调函数,浏览器会以一个指向Blob引用为参数,来调用该函数
      • 第二个参数type是图像类型,默认是image/png
      • 第三个参数quality是图像显示的质量,0-1.0

会员免费下载

链接:https://pan.baidu.com/s/16LSLFpZDGwHhbGbE8cLrpA

提取码: ****** 查看

¥69/年 开通VIP会员

成为本站VIP会员即可无限下载。 请先点击百度网盘,看资源是否还在,不在请点击链接通知站长补资源。

资源标签点击标签可查看对应分类的资源

HTML5/CSS

资源推荐

免费 图解数据结构:使用Java

C++ 程序设计语言:第4部分 标准库(原书第4版)

C++编程思想(两卷合订本)

CSS世界

JavaScript DOM编程艺术(第2版)

C++ Primer Plus(第6版) 中文版

Vue.js快速入门

Java编程思想(第4版) [thinking in java]

Copyright © 2021-2022 知识猫. All Rights Reserved.