createjs是一個輕量級的框架,稍微有點時間和耐心,就可以把全部源代碼都看一遍,畢竟只有三十幾個js文件。地址:http://www.createjs.com/
開發createjs的動畫或游戲,沒有重型的IDE或什么工具支持,我們只能從零開始寫js。一方面,這樣對於jser來說,足夠靈活;另外一方面,createjs因此足夠精簡足夠小。
createjs由幾個庫組成:
l easeljs,這個是核心,包括了顯示列表、事件機制;
l preloadjs,用於預加載圖片等;
l tweenjs,用於控制元件的緩動;
l soundjs,用於播放聲音。
easeljs 81k,preloadjs 31k,soundjs 34k,tweenjs 18k,對於手機小動畫或小游戲,其實只需要加載easeljs即可,因為核心庫已經涵蓋了簡單圖片的預加載功能。
開發步驟:
1、 下載類庫,可以使用源代碼,也可以使用壓縮過的min.js,就好像平時寫網頁一樣。
2、 建立html和canvas標簽,onload后再執行createjs相關邏輯。
3、 編寫createjs邏輯。這個非常簡單,因為createjs只提供了最簡單的基礎功能,我們理解了基礎功能后就可以疊積木了。
關於createjs,最關鍵是要理解類結構
上圖列出了createjs的主要類結構,所有舞台上的內容都是元件,元件的基類是DisplayObject。Container可以包含子元件,舞台Stage本身也是Container。另外Sprite用於表現SpriteSheet幀動畫人物、Bitmap用於展示純靜態的人物。
而Filter和Shadow則是濾鏡分支,可以針對任意元件實現顏色變換、模糊、陰影等效果。使用濾鏡的方式跟Flash一致,需要新建Filter實例,添加到目標元件的FilterList中,Createjs框架在下一幀就會把該元件加上濾鏡效果。
下邊以一個例子概要學習一下Createjs的使用:
<script type="text/javascript"> var stage; function init() { var canvas = document.getElementById("testCanvas"); stage = new createjs.Stage(canvas); stage.autoClear = true; //添加背景圖 var bg = new createjs.Bitmap("../res/bg.jpg"); stage.addChild(bg); //增加5個小人,不斷做旋轉和放縮 for (var i = 0; i < 5; i++) { var man = new createjs.Bitmap("../res/grossini.png"); man.regX = 42; man.regY = 60; man.x = canvas.width/6*(i+1); man.y = canvas.height/5*4; man.scaleX = man.scaleY = 1; stage.addChild(man); createjs.Tween.get(man, {loop: true}, true) .to({rotation: 360, scaleX:2, scaleY:2}, 1000).to({rotation: 360, scaleX:1, scaleY:1}, 1000); man.addEventListener("click", function(event) { console.log("click", event.currentTarget); }); //監聽點擊非常方便,位圖的透明區域忽略鼠標事件 } var images = []; for (var i = 1; i <= 14; i++) { images.push("../res/grossini_dance_" + (i<10?("0"+i):i) + ".png"); } //增加5個幀動畫小人,不斷播放14幀畫面 for (var j = 0; j < 5; j++) { var sheet = new createjs.SpriteSheet({ images: images, frames: {width: 85, height: 121, regX: 42, regY: 60} }); //需要設置每幀的寬高,注冊點信息 var man = new createjs.Sprite(sheet); man.framerate = 60/7; man.x = canvas.width/6*(j+1); man.y = canvas.height / 3; man.play(); stage.addChild(man); } stage.update(); createjs.Ticker.setFPS(60); createjs.Ticker.addEventListener("tick", tick); } //這里有點猥瑣,需要用戶自行控制舞台不斷update更新 function tick(event) { stage.update(event); } </script>