今天我們進入比較有趣的部分,製作基礎 Canvas 動畫,在 Canvas 內我們可以做到許多精美的互動設計,但由於每一次的動畫都必須要透過柳懶氣重新計算在渲染畫面,所以若是動畫做得越複雜,運算就會需要消耗更大量的時間與效能,因此,電腦的好壞決定了動畫的順暢度。這點是在製作 Canvas 動畫時必須要注意到的一個原則。
那麼確保身上的裝備都沒問題之後,我們就繼續踏上討伐魔王之路吧!
製作 Canvas 動畫影以下幾個基礎步驟
claerRect()
清除畫布,或是 fillRect()
填滿畫布覆蓋舊有的元素。設定 Canvas 動畫的時間
我們來簡單實作一下 canvas 動畫是如何繪製並且動起來的
<canvas id="car"></canvas>
canvas {
border: solid 2px;
}
var canvas = document.getElementById('car');
var ctx = canvas.getContext('2d');
canvas.width= 250
canvas.height= 250
function carMove () {
//車子本體
ctx.fillStyle="blue"
ctx.strokeRect(150, 180, 80, 50)
ctx.fillRect(150, 180, 80, 50)
// 車子輪胎
ctx.beginPath()
ctx.arc(170, 230, 8, 0, Math.PI*2)
ctx.arc(210, 230, 8, 0, Math.PI*2)
ctx.fillStyle="black"
ctx.fill()
}
carMove()
// 車子起始動畫位置
var time = 0
function carMove () {
time++
let carX = time%350-80
ctx.fillStyle="blue"
ctx.strokeRect(carX, 180, 80, 50)
ctx.fillRect(carX, 180, 80, 50)
ctx.beginPath()
ctx.arc(carX+20, 230, 8, 0, Math.PI*2)
ctx.arc(carX+60, 230, 8, 0, Math.PI*2)
ctx.fillStyle="black"
ctx.fill()
}
// 一秒鐘執行 30 次動畫
setInterval(carMove, 30)
// 取畫布的餘數,並再減調車體寬度,讓他完全隱藏在畫布外側
let carX = time%250-80
// 從座標 [0,0]座標清除,清除範圍 = 畫布大小
ctx.clearRect(0,0,250,250)
今天簡易基礎的 Canvas 動畫就講解到這邊啦~
其實 Canvas 還可以做出許多酷炫動畫,不過因為 Canvas 動畫實在太吃效能啦~ 筆者在製作時電腦一度當機ヾ(;゚;Д;゚;)ノ゙,所以大家在製作 Canvas 動畫時要記得隨時將檔案存檔,才不會爆掉喔~