博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《HTML5 Canvas游戏开发实战》——3.3 自定义画板
阅读量:6591 次
发布时间:2019-06-24

本文共 2656 字,大约阅读时间需要 8 分钟。

3.3 自定义画板

前面的章节已经将Canvas的API大致介绍完毕了,下面我们来制作一个自定义画板,进一步熟悉一下这些API的用法。

3.3.1 画板的建立
建立一个画板的步骤如下:
(1)当鼠标按下的时候,开始描画,此处需要加入鼠标按下事件。
(2)当鼠标弹起的时候,结束描画,此处需要加入鼠标弹起事件。
(3)在鼠标按下并且移动的时候,在鼠标经过的路径上画线,此处需要加入鼠标移动事件。
代码清单3-22实现了建立一个简单画板的功能。
代码清单 3-22

  

运行效果如图3-38所示。

image

代码清单3-22建立了一个黑色画板,当鼠标在画板上移动时,随鼠标的移动会画出白色线条。

在代码清单3-22中,下列代码画了一个黑色矩形区域,作为画板。

//画一个黑色矩形ctx.fillStyle="black";ctx.fillRect(0,0,600,300);

下面建立了3个变量,变量onoff用来控制鼠标是否按下,只有当鼠标按下的时候才会开始绘图。变量oldx、oldy表示鼠标发生移动前的坐标。

//按下标记var onoff = false;var oldx = -10;var oldy = -10;

下面设置画笔的颜色为白色,线宽为4。

//设置颜色var linecolor = "white";//设置线宽var linw = 4;

下面给Canvas添加了鼠标按下侦听事件,当鼠标按下的时候,会调用down函数。

//添加鼠标按下事件canvas.addEventListener("mousedown",down,false);

下面给Canvas添加了鼠标弹起侦听事件,当鼠标弹起的时候,会调用up函数。

//添加鼠标弹起事件canvas.addEventListener("mouseup",up,false);

下面给Canvas添加了鼠标移动侦听事件,当鼠标在Canvas上移动的时候,会持续调用draw函数。

//添加鼠标移动事件canvas.addEventListener("mousemove",draw,true);

下面看看up、down、draw 3个函数中的内容。

down函数是在鼠标按下的时候调用的。当调用down函数的时候,会将onoff变量设置为true,表示开始绘图,并给oldx、oldy赋予鼠标当前位置的坐标值。

function down(event){    onoff = true;    oldx = event.pageX-10;    oldy = event.pageY-10;}

up函数是在鼠标弹起的时候调用的。当调用up函数的时候,将onoff变量设置为false,表示结束绘图。

function up(){    onoff = false;}

draw函数是在鼠标发生移动的时候不断持续调用的。当调用draw函数的时候,首先判断onoff变量的值,即判断鼠标是否处于按下状态,如果鼠标处于按下状态,则开始画线。

function draw(event){    if(onoff == true){         var newx = event.pageX-10;         var newy = event.pageY-10;         ctx.beginPath();        ctx.moveTo(oldx,oldy);        ctx.lineTo(newx,newy);        ctx.strokeStyle=linecolor;        ctx.lineWidth=linw;        ctx.lineCap="round";        ctx.stroke();        oldx = newx;        oldy = newy;    };};

每次画线时,需要确定线条的起始位置和结束位置,线条的起始位置就是坐标(oldx,oldy),然后把当前鼠标位置作为线条的结束位置,代码如下所示:

var newx = event.pageX-10; var newy = event.pageY-10;

接着,利用moveTo和lineTo画线,代码如下所示:

ctx.beginPath();ctx.moveTo(oldx,oldy);ctx.lineTo(newx,newy);ctx.strokeStyle=linecolor;ctx.lineWidth=linw;ctx.lineCap="round";ctx.stroke();

上面的代码是画一条从坐标(oldx,oldy)到坐标(newx,newy)的线段,并设置了线条的颜色、宽度和线帽的类型。

在此次绘制结束后,新的鼠标位置将作为下一次画线的起始位置,代码如下所示:

oldx = newx;oldy = newy;

上面的代码已经实现了一个最简单的画板功能。下面将其再完善一下,即加入按钮操作改变画笔颜色和线条宽度的功能。完整的代码如代码清单3-23所示。

代码清单 3-23

  

运行效果如图3-39所示。

image

在代码清单3-23中:

下面的代码加入了6个按钮,并加入了单击事件,当单击不同按钮的时候,就会相应地改变画笔的颜色。

下面的代码加入了3个按钮,并加入了单击事件,当单击不同按钮的时候,就会相应地改变线条的宽度。

3.3.2 Canvas画布的导出功能

在3.3.1节中我们建立了一个画板,这一节再来给画板添加图片导出功能,即复制Canvas画板上的图像,使其保存为图片格式。
要将Canvas画板保存为图片格式,只需要使用下面的方法即可:

canvas.toDataURL("image/png");

现在可在页面上新建一个< img >标签,然后将复制的Canvas内容用< img>表示出来。完整代码如代码清单3-24所示。

代码清单 3-24

  

运行效果如图3-40所示。

image

如果想要将图片保存为图片文件,还需要借助PHP或ASP等工具,这里就不做讨论了。

转载地址:http://nouio.baihongyu.com/

你可能感兴趣的文章
查看JVM统计信息
查看>>
备份服务器端SQL SERVER数据库至本地目录
查看>>
【温故而知新-Javascript】使用Web存储
查看>>
CString、char*与string的区别
查看>>
Microsoft SQL Server 2005 提供了一些工具来监控数据库
查看>>
LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】
查看>>
关于Windows Phone数据库和Silverlight本地文件操作
查看>>
如何用cocos2d-x来开发简单的Uphone游戏:(五) 打包和发布
查看>>
IIS FTP匿名登录不成功
查看>>
C#鹰眼_带拖动
查看>>
HTML5和CSS3开发工具资源汇总
查看>>
认真分析mmap:是什么 为什么 怎么用【转】
查看>>
CrazePony飞行器--通信部分介绍【转】
查看>>
算法-符号表的实现(顺序查找和二分查找)
查看>>
Android Content Provider的启动过程源码分析
查看>>
POJ1274 The Perfect Stall【二部图最大匹配】
查看>>
极速理解设计模式系列:15.中介者模式(Mediator Pattern)
查看>>
Netty 实现HTTP文件服务器
查看>>
【MFC两种视频图像採集方法】DirectShow与Opencv
查看>>
ORACLE数据库表解锁record is locked by another user
查看>>