一个JS动画框架-基于HTML5::Canvas

 

好久之前,发现必须应该有个动画框架,才能支持开发出更加复杂的动画效果。所以在学习Canvas的过程中,我就萌发了这样的念头,在无数大神大牛的启发下,今天“出厂”一个小的动画框架,希望能和有兴趣的朋友一起探讨交流一下。

1、实现精灵

模仿Flash的动画里面有帧和精灵(sprite)的概念,由于canvas只是一个元素,并没有相应的这些东西。所以在这里,我参照别人的思想,实现一个精灵父类,让所有的精灵对象都继承它。代码如下:

 

 

2、实现帧

在实现了精灵后,所以我就在前人的代码上,增加一些自己的东西,实现一个Canvas类,实现JS的“帧”。代码如下: 之所以用setTimeout而不用setInterval,原因是每一帧的计算时间如果定死了,当动画中的精灵比较多的时候,相应的运动计算量比较大,如果进入下一帧,相应的计算却还没计算好,将出现跳帧。所以,我采用setTimeout,将每一帧的计算完成后,才进行下一帧。

 

3、关于运动

原来我一直在纠结这个问题,不知道如何计算运动,我的意思是,运动的形式各种各样,要封装起来不是那么简单,后来看了Milo大神关于运动学的模拟,顿时貌似顿开,运用了欧拉方法,使用二维的矢量类来表示一切速度,加速度,位置。

4、运动的叠加

一个元素的运动,不可能只是单一一种运动,所以在框架中,我使用了一个数组:motionFunc,来保存每个元素自己特有的运动方程,并且可以叠加,在最后的例子可以看到,一个直线运动叠加往返运动。

5、实现FPS

FPS,哦,这个我知道,第一人称射击游戏嘛,我的最爱-_-|||。
FPS:Frames Per Second 每秒传输帧数。也就是刷新频率。玩过3D游戏都知道,FPS越高,游戏越流畅。
FPS值=每秒/每帧用过的时间。
最好取平均值计算比较准确。
感谢oldj大哥对我的指导。这里计算FPS的思路和代码参考oldj大哥

好了,一个小小的框架就完成了,下面看看效果。按add增加小球

 

(转自:http://www.funnyhao.com/a-js-animation-framework-based-on-html5-canvas/)

 

 

发布了36 篇原创文章 · 获赞 5 · 访问量 23万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章