"丘比特之箭"——简单的canvas动画

来源:互联网 发布:回收珠宝的软件 编辑:程序博客网 时间:2024/06/10 18:28

          刚学HTML的canvas,感觉这个家伙挺神奇的,而且人们给我的感觉它很简单,但事实应该不是这样的。起码对于我来说不是简单的,学啥都的有持之以恒的心啊。希望自己可以坚持,带着好奇的心去感受js动画带给自己的快乐吧!!

        弄了几个小时的时间,就做了一个这样简单的动画,自己好笨啊。但还是想发上来,总结一下都用到了啥方法。

        首先,一定是先创建一个画布canvas,设定画布的长和宽;然后,在画布中插入一种图片,作为背景图;插入图片的方法如下(也可以说加载图片):

        var c = document.getElementById("mycanvas");
        var con = c.getContext("2d");

var img = new Image();//声明一个新的图像对象img.src = "xin.jpg";//图像的来源img.onload = function(){调用onload方法con.drawImage(img,0,0);//将图像画到画布上,起点坐标(0,0)}


       插入的图片是一张心心相印的图像,而本人就想画出一只箭,像丘比特之箭一样,将两颗心串起来。这时候就要考虑:一只箭的有箭尾,箭杆,箭头。

由图可知,这只箭最好是从右下角向左上角穿过,另外箭杆的起始坐标你的想好设置在那里,终点坐标设置在那里,同时这只箭不能连续走下去,中间的有断开的地方(如上图),所以中间断开的坐标你也的选好吧。这些工作做完了,那我们开始画箭杆。这里我的箭杆是一堆连续的小圆构成(你也可以直接用lineTo画直线)

箭杆

首先,使用构造函数建立一个“父类”(我把它当作了C语言里的结构体定义)

function circlc(){this.x = 184;this.y = 0;this.color = "#F09";this.r = 2.6;}

var pen = new circlc();//实例化

接着写画圆的函数把:

function Draw(){con.fillStyle = pen.color;con.beginPath();con.arc(pen.x,pen.y,pen.r,0,Math.PI*2);con.fill();}

然后写该小实心圆移动的方法吧:

function animate(){pen.x -= 1;pen.y = 0.9357*pen.x - 4.5;//一条直线Draw(); }

箭尾

箭尾就是使用moveTo和lineTo函数,首先将画笔的坐标移动到箭杆的起始坐标上(用moveTo),然后用一堆lineTo函数画线,最后用fill()函数填充
function tailDraw(){con.fillStyle = pen.color;con.beginPath();con.moveTo(184,168);con.lineTo(185,181);con.lineTo(175,170);con.lineTo(177,158);con.lineTo(187,158);con.lineTo(197,166);con.fill();}

箭头

箭头和箭尾的画法一样,需要画出一个三角形:
function headDraw(){con.fillStyle = pen.color;con.beginPath();con.moveTo(7.5,2.5);con.lineTo(29,7);con.lineTo(11,19);con.fill();}
好了,差不多了,然后调用一个相当于定时器的东西吧setInterval();我这里写的,个人感觉作为初学者还是有那么一点儿想法的(哈哈!!)
var shif = false;function show(){   //这个函数是为了一个button准备的shif = !shif;if(shif){tailDraw();//画出箭尾var time1 = setInterval(function(){//调用“定时器1”,定时时间是30mst--;//这个值是和箭杆的pen.x值一样的animate();//画箭杆if(t <= 152)//当箭杆画到这里时,执行if内部的函数{clearInterval(time1);//关掉“定时器1”pen.x = 40;//将下次画箭杆的坐标设好t = 40;//同样t值跟随var time2 = setInterval(function(){//再开一个“定时器2”t--;animate();//继续画出箭杆if(t <= 10){//箭杆终于画到头了headDraw();//把箭头画出来clearInterval(time2);//关掉“定时器2”}},20);//定时时间20ms}},20);}else{con.clearRect(0,0,200,200);//如果shif值为false,清空画布con.drawImage(img,0,0);//重画背景图pen.x = 184;//重设箭杆坐标t = 184;//t值跟随}}
个人觉得,这个小程序中,有兴趣的伙伴们可以,再写一个初始化函数就更好了。另外,在画布的最左下角加载一张丘比特的图像,当点击按钮的时候,箭从丘比特的弓上射出
,就更加生动了。最后把所有代码粘过来,各位大神小神,多多指教。
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>丘比特之箭</title></head><body align="center">    <div style="color:#F00"><strong>丘比特之箭</strong></div><div><canvas id="mycanvas" width="200" height="200"></canvas><br>            <input type="button" value="演示" onClick="show()"></div>        <script>var c = document.getElementById("mycanvas");var con = c.getContext("2d");var t = 184;var img = new Image();img.src = "xin.jpg";img.onload = function(){con.drawImage(img,0,0);}function circlc(){this.x = 184;this.y = 0;this.color = "#F09";this.r = 2.6;}var pen = new circlc();function tailDraw(){con.fillStyle = pen.color;con.beginPath();con.moveTo(184,168);con.lineTo(185,181);con.lineTo(175,170);con.lineTo(177,158);con.lineTo(187,158);con.lineTo(197,166);con.fill();}function headDraw(){con.fillStyle = pen.color;con.beginPath();con.moveTo(7.5,2.5);con.lineTo(29,7);con.lineTo(11,19);con.fill();}function Draw(){//con.drawImage(img,0,0);con.fillStyle = pen.color;con.beginPath();con.arc(pen.x,pen.y,pen.r,0,Math.PI*2);con.fill();}//window.addEventListener("load",Draw,true);//调试画笔起点的位置(观看用)function animate(){pen.x -= 1;pen.y = 0.9357*pen.x - 4.5;Draw();}var shif = false;function show(){shif = !shif;if(shif){tailDraw();var time1 = setInterval(function(){t--;animate();if(t <= 152){clearInterval(time1);pen.x = 40;t = 40;var time2 = setInterval(function(){t--;animate();if(t <= 10){headDraw();clearInterval(time2);}},20);}},20);}else{con.clearRect(0,0,200,200);con.drawImage(img,0,0);pen.x = 184;t = 184;}}</script></body></html>
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 洁净净化区湿度高怎么办 政府测量土地少算了面积怎么办 北京武警欠我钱怎么办 被小混混打了怎么办 农保地建房子怎么办 WOW7.3到8.0橙装怎么办 90后离婚有孩子怎么办 90后的我们该怎么办 越南和中国结婚怎么办结婚证 改革怎么看走留怎么办事业怎么干 改革怎么看走留怎么办工作怎么干 军改怎么看我该怎么办 改革怎么办我该怎么干 改革怎么看 走留怎么办 腿又粗又弯怎么办 假发发量太多了怎么办 剃了发际线后悔怎么办 在外面遇到坏人抢劫怎么办 请事假单位不批怎么办 捷普请假不批怎么办 钉钉请假不审批怎么办 钉钉请假未审批怎么办 员工事假+工作履责怎么办 员工请事假不批怎么办 哺乳起员工一直请事假怎么办 请公休公司不批怎么办 辞职信交了不批怎么办 辞职年假没有休完怎么办 病假算旷工我该怎么办 辞职信领导不批怎么办 软顶帽子踏顶了怎么办 戴草帽总往下掉怎么办 白鞋子低帮发黄怎么办 跳伞的时候降落伞打不开怎么办 收腹裤穿着总是往下卷怎么办? 结婚打了黑伞怎么办 酷派x7开不了机怎么办 脸书账号被禁用怎么办 文档变成了d盘怎么办? 派派背包满了怎么办 黑裤子掉颜色了怎么办