一個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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章