canvas教程

CreateJs入门必知必会

字号+ 作者:H5之家 来源:H5之家 2017-06-06 18:03 我要评论( )

CreateJS介绍 CreateJS是基于HTML5开发的一套模块化的库和工具。 基于这些库,可以非常快捷地开发出基于HTML5的游戏、动画和交互应用。 CreateJS主要包含如下四

CreateJS介绍

CreateJS是基于HTML5开发的一套模块化的库和工具。
基于这些库,可以非常快捷地开发出基于HTML5的游戏、动画和交互应用。
CreateJS主要包含如下四个类库:

CreateJS官网:
CreateJs中文网:

学习CreateJs第一步,先要看文档

CreateJs提供了一些显示类:

使用CreateJs理解一些概念就好办多了,它有一个显示列表,其中Stage是显示列表的顶级容器,然后是Container,再之后就是各种Shape了。
这些显示类都是集成自DisplayObject类,它是一个抽象类,不能直接构造,它定义了核心的属性和方法,比如:x,y,alpha,rotation,scaleX,scaleY等。
所以:看文档可以先看看DisplayObject类,然后去看看Stage舞台类,然后看看Container类,然后就是画图形的Shape类等其他类,先看构造函数需要传什么参数,再看看有哪些属性和方法。Ticker类也可以看看。

CreateJs一些API作用

要画图首先要引入这个库没毛病吧,然后实例化一个舞台。
然后你要画一个图形,就找Shape的文档,文档上写的很清楚怎么画一个图形。
new一个Shape对象,用它的属性graphics,我叫它画笔。它就相当于Graphics类,所以关于它的方法可以去看Graphics类的API。
graphics可以设置一些样式,线条宽度,颜色等等,还可以调用一些方法绘制图形,画矩形rect或者drawRect都可以。画圆形arc或者drawCircle都可以,arc还可以画扇形。
但是这样页面是不会有任何反应的,还需要把这个Shape对象添加到舞台上去,这时候页面还是没有反应,因为添加上去还要渲染,需要用舞台调用update方法。CreateJs提供了tick事件,会自动update。
这里也得提一下,CreateJs提供了两种渲染模式,一种是用setTimeout,一种是用requestAnimationFrame,默认是setTimeout,默认的帧数是20,一般的话还没啥,但是如果你设置成requestAnimationFrame模式的话,就会感觉到动画如丝般的流畅,差距一眼就看出来了。这些API里面都有,好好看文档。

createjs.Ticker.timingMode = createjs.Ticker.RAF;

HTML代码

<canvas id="canvas"></canvas>

JS

let canvas = document.querySelector('#canvas'); canvas.width = window.innerWidth; canvas.height = window.innerHeight; //创建舞台 let stage = new createjs.Stage(canvas); //舞台自动更新 createjs.Ticker.on('tick',stage); //创建一个Shape对象 let rect = new createjs.Shape(); //用画笔设置颜色,调用方法画矩形,矩形参数猜都猜出来了:x,y,w,h rect.graphics.beginFill("#f00").drawRect(0, 0, 100, 100); //添加到舞台 stage.addChild(rect);

这就是用CreateJs画图的一个大概流程:创建显示对象→设置一些参数→调用方法绘制→添加到舞台→update()
画圆形也一样,只不过调用的方法变了。

CreateJs做动效

CreateJs就是封装了canvas的API让绘图变得简单好用,canvas做动效的原理就是不停的绘制不同的场景。
对于CreateJs来说就是改变这些显示对象的属性值,比如x,y累加移动1px,就可以做移动的效果,还可以改变透明度:alpha,缩放:scaleX,scaleY,扭曲:skewX,skewY,旋转:rotation等等。
接着上面的代码

function loop () { rect.x++; if(rect.x == 100){ rect.x = 0; } requestAnimationFrame(loop); } loop();

这样矩形就动起来了。
但是有一个需要注意的地方,如果我们做的是放大或者旋转动画就有问题了。如图:

CreateJs入门必知必会


默认是基于坐标圆点缩放的,默认它的圆点是在左上角的,所以一般做动画都是先指定x,y不会使用默认的圆点的。

CreateJs入门必知必会

let circle = new createjs.Shape(); circle.x = circle.y = 300; circle.graphics.beginFill("#f00").drawCircle(0, 0, 100, 100); stage.addChild(circle); function loop () { circle.scaleX += 0.01; circle.scaleY += 0.01; if(circle.scaleX >= 2){ circle.scaleX = 1; circle.scaleY = 1; } requestAnimationFrame(loop); } loop();

然后可以借助动画库来实现一些连贯的动画。CreateJs默认有带了一个动画库tweenjs。这API就不用说了吧,猜都猜到怎么用了。记得要先引入这个动画库

createjs.Tween.get(circle,{loop:true}) .wait(1000) .to({x:100,y:100},1000) .wait(1000) .to({scaleX:1.5},1000) .wait(1000) .to({scaleY:1.5},1000) .wait(1000) .to({scaleX:1,scaleY:1},1000,createjs.Ease.bounceIn) .wait(1000) .to({x:0,y:0},1000);

然后,需要注意的是,如果你添加多个显示对象,他们是有层级关系的,stage对象有个children属性代表子元素,是一个数组,里面的元素层级像下标一样从0开始,简单来说就是后面的覆盖前面的,addChild方法是添加到显示列表的最后。

//所以,比如有红色和蓝色两个圆,要想让红色在上面就要后添加红色,就只能 stage.addChild(blue); stage.addChild(red); //当然,作为一个强大的canvas库,还有其他方法,可以设置元素的层级 stage.setChildIndex(red,1); //还可以互换两个元素的位置 stage.swapChildren(blue,red); //还可以根据元素下标来互换两个元素 stage.swapChildrenAt(0,1); //然而有时候你可能并不知道元素的下标,所以你可以这样 stage.getChildIndex(red) //1 //还有一些获取子元素的方法 addChild,addChildAt,getChildAt,getChildByName //还可以获取元素的大小,不过这个方法不支持获取Shape对象的大小,其他图片,文字啥的可以。 getBounds() //还有删除子元素的方法 removeChild,removeChildAt //还有阴影类,Shadow red.shadow = new createjs.Shadow("#000", 0, 0, 30); //还可以画虚线,20是每个虚线的长,10是虚线的间隔,直线就是去掉setStrokeDash这个方法 let line = new createjs.Shape(); line.graphics.setStrokeDash([20, 10], 0).setStrokeStyle(3).beginStroke('red').moveTo(0,0).lineTo(200,0); //还有遮罩,就是溢出隐藏那种效果。 let rect = new createjs.Shape(); rect.graphics.rect(0,0,100,100).closePath(); let line = new createjs.Shape(); line.graphics.setStrokeDash([20, 10], 0).setStrokeStyle(3).beginStroke('red').moveTo(0,0).lineTo(200,0); //线的遮罩,这样,只能看到线条的100px长。 line.mask = rect; stage.addChild(line);//遮罩不需要添加 CreateJs事件

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • canvas addEventListener简单例子

    canvas addEventListener简单例子

    2017-06-07 08:00

  • HTML5 Canvas火焰闪烁动画 火焰跟随鼠标

    HTML5 Canvas火焰闪烁动画 火焰跟随鼠标

    2017-06-06 13:04

  • 使用toBlob()方法将canvas对象转换为Blob对象

    使用toBlob()方法将canvas对象转换为Blob对象

    2017-06-06 13:04

  • JavaScript学习小结之使用canvas画“哆啦A梦”时钟

    JavaScript学习小结之使用canvas画“哆啦A梦”时钟

    2017-06-04 17:03

网友点评
"