上一节了解了一下事件,这次来了解一下动画,不是改变坐标形成的动画,而是序列帧组成的动画。
pixi.js中用的是MovieClip,和as一样。
老规矩,先来看一下效果。
代码如下:
<html> <head> <title>pixi.js-动画</title> <script type="text/javascript" src="/js/pixi.min.js"></script> <script type="text/javascript"> var frameRate=10; var renderer; var stage; var tf; var fps=0; var ticker; window.onload = function() { renderer = new PIXI.WebGLRenderer(600, 400); document.body.appendChild(renderer.view); stage = new PIXI.Container(); var texture = PIXI.Texture.fromImage('mc.png'); var textureArray = []; var arr=[[0,0,101,101],[101,0,101,101],[0,101,101,101],[101,101,101,101]]; for (var i = 0; i < 4; i++) { var texture = new PIXI.Texture(texture, new PIXI.Rectangle(arr[i][0], arr[i][1], arr[i][2], arr[i][3])); textureArray.push(texture); }; var mc = new PIXI.extras.MovieClip(textureArray); stage.addChild(mc); mc.play(); mc.x=200; mc.y=200; tf = new PIXI.Text("fps:0", { font: '24px Arial', fill: 0xff1010, align: 'left' }); stage.addChild(tf); refresh(); setInterval(showFps, 1000); } function showFps(){ tf.text="fps:"+fps; fps=0; } function refresh(){ fps++; var t=new Date().getTime(); renderer.render(stage); t=new Date().getTime()-t; var delay=1000/frameRate; if(t>=delay){ refresh(); } else{ setTimeout(refresh,delay-t); } } </script> </head> <body> </body> </html>
用到了Texture类和MovieClip类。
Texture用来管理图片资源,MovieClip用来实现动画,这两个类还是很重要的。
其实很简单,就是在MovieClip初始化的时候,传入一个Texture对象组成的数组,Texture初始化的时候,可以使用一个已存在的Texture和一个矩形区域(其实有3个矩形区域参数,其他两个参数作用不清楚)。
MovieClip是继承自Sprite的,和as一样。MovieClip初始化之后,需要手动调用play来播放,默认是不播放的。
播放速度有问题,和刷新速度不同步,因为我们是自己写的setTimeout实现的刷新。不知道是不是做法不对,或者自己控制MovieClip刷新。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。