《HTML5 Canvas游戏开发实战》——2.2 绘制复杂图形

2.2 绘制复杂图形

前面了解了基本图形的绘制方法,下面我们来看看复杂图形该如何绘制。
2.2.1 画曲线
贝塞尔曲线,又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。在这里我们不研究贝塞尔曲线的原理,主要介绍在Canvas中如何绘制它。
1 . 二次贝塞尔曲线
二次贝塞尔曲线有一个控制点。在Canvas中用quadraticCurveTo(cpx,cpy,x,y)函数来绘制二次贝塞尔曲线,cpx、cpy表示控制点的坐标;x、y表示终点坐标。
它的绘制如代码清单2-11所示。
代码清单 2-11

<script type="text/javascript">
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.moveTo(100,100);
ctx.quadraticCurveTo(20,50,200,20);
ctx.stroke();
</script>

绘制效果如图2-11所示。

图2-12所示是它的原理图。

2 . 三次贝塞尔曲线
三次贝塞尔曲线与二次贝塞尔曲线的区别在于,三次贝塞尔曲线有两个控制点,如代码清单2-12所示。
代码清单 2-12

<script type="text/javascript">
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.moveTo(68, 130);
var cX1 = 20;
var cY1 = 10;
var cX2 = 268;
var cY2 = 10;
var endX = 268;
var endY = 170;
ctx.bezierCurveTo(cX1, cY1, cX2,cY2, endX, endY);
ctx.stroke();
</script>

绘制效果如图2-13所示。

图2-14所示是它的原理图。

2.2.2 利用clip在指定区域绘图
clip函数使用当前路径作为连续绘制操作的剪切区域。我们可以把它看作一扇窗户,无论在画板上绘制了多大的图形,最后看到的图形都只能由clip这扇窗户来决定。
为了更容易理解,我们看代码清单2-13。
代码清单 2-13

<script type="text/javascript">
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.arc(100,100,40,0,360*Math.PI/180,true);
ctx.clip();
ctx.beginPath();
//设定颜色
ctx.fillStyle="lightblue";
//绘制矩形
ctx.fillRect(0,0,300,150);
</script>

在这里,我们首先用arc画了一个圆,然后加入clip函数,最后又画了一个矩形,最后的效果如图2-15所示。

可以看到,虽然我们画了一个矩形,但是最后出现的图形里并没有矩形。这是因为首先绘制的是一个圆,然后clip函数将当前的这个圆作为绘制操作的区域,所以之后画出的图形只能显示在这个区域内。也就是说,即使一间房子再大,可是它的窗户很小,最后我们透过这扇窗户能够看到的空间也就只有窗户这么大。所以代码清单中画出的大矩形只能显示出图2-15所示的效果了。
2.2.3 绘制自定义图形
所谓自定义图形,是指将上面讲到的各种方法结合起来,实现一些特殊的图形。比如代码清单2-14。
代码清单 2-14

<script type="text/javascript">
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.moveTo(100, 150);
ctx.bezierCurveTo(50, 100, 100, 0, 150, 50);
ctx.bezierCurveTo(200, 0, 250, 100, 200, 150);
ctx.bezierCurveTo(250, 200, 200, 300, 150, 250);
ctx.bezierCurveTo( 100, 300, 50, 200,100, 150);
ctx.closePath();
ctx.moveTo(100, 150);
ctx.lineTo(150, 50);
ctx.lineTo(200, 150);
ctx.lineTo(150, 250);
ctx.lineTo(100, 150);
ctx.lineWidth = 5;
ctx.strokeStyle = "#ff0000";
ctx.stroke();
</script>

上面代码绘制的自定义图形如图2-16所示。

时间: 2024-09-12 16:03:44

《HTML5 Canvas游戏开发实战》——2.2 绘制复杂图形的相关文章

《HTML5 Canvas游戏开发实战》——3.2 图形的渲染

3.2 图形的渲染 Canvas提供了很多对颜色进行操作的API,可实现渐变.反色等效果.这一节中将举例说明如何实现这些效果.3.2.1 绘制颜色渐变效果的图形 颜色的渐变分为线性渐变和径向渐变,下面分别进行说明. 1 . 线性渐变 使用createLinearGradient函数和addColorStop函数可以实现线性渐变功能. createLinearGradient函数的原型如下: createLinearGradient(x1,y1,x2,y2) 其中的4个参数分别是渐变的出发点坐标(

《HTML5 Canvas游戏开发实战》——导读

前言 为什么要写这本书 并非计算机专业的我,却最终走上了编程之路,并写了这样一本书,为什么呢?其实一切都是因为和游戏结了缘. 小时候我非常喜欢玩游戏,为了玩游戏和小伙伴们干过不少调皮捣蛋的事情.初中为了得到自己的第一台游戏机,和父亲打赌,破天荒拿了全班第一名.当然有了游戏机的相伴,从那以后就再也没有拿过第一名了.因为数学上较有优势,所以读大学时选择的是数学专业,没有选读计算机让后来做开发的我多少感到有些遗憾.和其他人一样,大学是真正改变我人生的时期,第一次有了电脑,第一次从室友嘴里得知QQ为何物

《HTML5 Canvas游戏开发实战》——2.1 绘制基本图形

2.1 绘制基本图形 所谓基本图形,就是指线.矩形.圆等最简单的图形,任何复杂的图形都是由这些简单的图形组合而成的.我们首先来了解一下这些简单图形的绘制方法.2.1.1 画线你可能是第一次接触Canvas绘图.首先,我们通过绘制一个简单的直线来学习Canvas的功能.其代码如代码清单2-1所示.代码清单 2-1 <!DOCTYPE HTML> <html> <body> <canvas id="myCanvas" width="200

《HTML5 Canvas游戏开发实战》——2.4 图片操作

2.4 图片操作 无论我们开发的是应用程序还是游戏软件,都是离不开图片,没有图片就无法让整个页面漂亮起来.开发游戏的时候,游戏中的地图.背景.人物.物品等都是由图片组成的,所以图片的显示和操作非常重要.Canvas中提供了drawImage函数和putImageData函数来绘制图片,在本节中将一一讲解.2.4.1 利用drawImage绘制图片 drawImage函数有3种函数原型,其语法如下: drawImage(image, dx, dy); drawImage(image, dx, dy

《HTML5 Canvas游戏开发实战》——3.4 小结

3.4 小结 本章主要首先介绍了Canvas中的缩放.平移.旋转和倾斜等基本变形功能的实现,并且利用这些基本变形的组合操作实现了图片的扭曲:接着介绍了色彩的渲染:最后运用之前所介绍的内容制作了一个简单的自定义画板.到此Canvas的绘图相关API就基本上介绍完了.只要运用好这些API,就可以制作出更多更复杂的效果.但是直接运用这些API来开发游戏是相当不方便的,一些很简单的功能可能都需要大量的代码来实现,比如本章的图片扭曲功能,必须根据图片扭曲后的顶点坐标去计算相应的参数,而制作游戏时可能会有更

《HTML5 Canvas游戏开发实战》——第1章 准备工作

第一部分 准备工作篇 第1章 准备工作 作为本书的第一章,我们先来学习一下什么是HTML5.什么是Canvas元素.HTML5的开发与运行环境,以及如何选择它的开发工具等基础知识.对于游戏开发来说,如果不以面向对象为基础,那么开发思路就会不够清晰,代码也难以做到工整,可读性差,会给后期维护带来很大困难.所以在进入游戏开发之前,本章还会对JavaScript的面向对象编程进行简要的讲解.

《HTML5 Canvas游戏开发实战》——第3章 Canvas高级功能

第3章 Canvas高级功能 在进行游戏开发的时候,离不开图形的变化,比如放大.缩小.旋转.平移等功能都是游戏开发中常用的变形手段.同时,为了使得游戏画面更加丰富多彩,还需要设置界面的颜色来实现更加精美的画面.本章将通过介绍Canvas的变形.色彩调整等高级功能来实现这些奇妙的变化.

《HTML5 Canvas游戏开发实战》——第2章 Canvas基本功能

第2章 Canvas基本功能 本章主要讲解HTML5 Canvas的基本功能,利用Canvas的API,展示一些基本图形的绘制及操作方法,包括画线.画图.文字操作及图片操作等.

《HTML5 Canvas游戏开发实战》——1.6 JavaScript中的面向对象

1.6 JavaScript中的面向对象 在本章开始的时候就已经说了,对于游戏开发来说,使用面向对象的方法进行编程是很有必要的.所以在介绍游戏开发之前,先来了解一下如何使用JavaScript进行面向对象的编程.可以说,JavaScript是一种基于对象的语言,但是,它又不是一种真正的面向对象的编程语言,因为它的语法中不存在class(类).本节将分析和解决如何在JavaScript中实现封装和继承等面向对象的问题.1.6.1 类JavaScript对象很抽象,所以下面将以实际的例子来解释如何定