canvas小球碰壁隨機運動
分享一段程式碼例項,它利用canvas實現了小球隨機運動碰壁效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> let draw20 = id=> { let canvas = document.getElementById(id); if (canvas == null) return false; let context = canvas.getContext("2d"); let interal = setInterval(() => move(context), 1); } let r = 30, x = r, y = r, mx = 0, my = 0, ml = 1, cw = 1000, ch = 500; let move = context => { context.clearRect(0, 0, cw, ch); context.fillStyle = "#EEEEFF"; context.fillRect(0, 0, cw, ch); context.beginPath(); context.fillStyle = "rgba(255,0,0,0.5)"; context.arc(x, y, r, 0, Math.PI * 2); context.fill(); if (mx == 0) { x = x + ml; if (x >= cw - r) { mx = 1; } } else { x = x - ml; if (x <= r) { mx = 0; } } if (my == 0) { y = y + ml; if (y >= ch - r) { my = 1; } } else { y = y - ml; if (y <= r) { my = 0; } } } window.onload = () =>draw20("c1"); </script> </head> <body> <canvas id="c1" width="1000" height="500"></canvas> </body> </html>
上面程式碼實現預期效果,下面介紹一下它的實現過程。
一.程式碼註釋:
[JavaScript] 純文字檢視 複製程式碼let draw20 = id=> { let canvas = document.getElementById(id); if (canvas == null) return false; let context = canvas.getContext("2d"); let interal = setInterval(() => move(context), 1); }
宣告一個函式,引數是canvas元素的id屬性值。
獲取指定的canvas元素物件,並判斷是否存在,如果不存在,則跳出函式。
然後獲取canvas繪圖環境,最後利用定時器函式實現不間斷的繪圖效果,也就是隨機運動碰壁效果。
[JavaScript] 純文字檢視 複製程式碼let r = 30, x = r, y = r, mx = 0, my = 0, ml = 1, cw = 1000, ch = 500;
定義一些引數,比如圓的半徑或者矩形框的尺寸等,後面會有介紹。
[JavaScript] 純文字檢視 複製程式碼context.clearRect(0, 0, cw, ch); context.fillStyle = "#EEEEFF"; context.fillRect(0, 0, cw, ch);
上述程式碼用來繪製大的矩形區域。
首先利用clearRect方法擦除指定區域內的畫素,否則我們看到的不是單個小球的運動,而是無數小球形成的運動軌跡。
context.fillStyle規定矩形的背景顏色。
最後利用context.fillRect()方法繪製一個矩形。
[JavaScript] 純文字檢視 複製程式碼context.beginPath(); context.fillStyle = "rgba(255,0,0,0.5)"; context.arc(x, y, r, 0, Math.PI * 2); context.fill();
上述程式碼用來繪製小球。
開始一個新的路徑,然後設定填充色,最後繪製出這個小球。
[JavaScript] 純文字檢視 複製程式碼if (mx == 0) { x = x + ml; if (x >= cw - r) { mx = 1; } } else { x = x - ml; if (x <= r) { mx = 0; } }
mx等於0表示在左邊,1表示在後邊。
很簡單的數學運算,一旦小球運動到了最後邊,那麼值就會變成1。
對於上下訪問也是同樣的道理,my等於0表示在上邊,等於1表示在下邊。
二.相關閱讀:
(1).箭頭函式參閱箭頭函式介紹一章節。
(2).document.getElementById參閱document.getElementById()一章節。
(3).getContext參閱canvas getContext()方法一章節。
(4).setInterval參閱JavaScript setInterval()一章節。
(5).clearRect參閱canvas清除指定區域內容clearRect()一章節。
(6).beginPath參閱canvas beginPath()方法詳解一章節。
(7).arc參閱canvas arc()方法詳解一章節。
(8).fillRect參閱canvas fillRect()一章節。
相關文章
- canvas小球碰壁效果Canvas
- canvas小球拋物線運動Canvas
- JavaScript小球碰壁詳解JavaScript
- canvas小球擺動效果Canvas
- JavaScript隨機漂浮碰壁效果JavaScript隨機
- WebAssembly Demo之Canvas中隨機運動圓球WebCanvas隨機
- canvas小球亂撞Canvas
- 小球運動-常規1
- 奇妙的canvas:彈跳小球Canvas
- 180行JavaScript程式碼實現的小球隨機移動程式碼JavaScript隨機
- canvas繪製小球漸隱漸現Canvas
- canvas水平勻速運動效果Canvas
- 協程實現canvas影像隨機閃爍Canvas隨機
- 【canvas】箭頭跟隨滑鼠移動的動畫原理Canvas動畫
- 運用JS 實現隨機點名 (隨機點名)JS隨機
- HTML5中canvas實現小球擊打小方塊遊戲HTMLCanvas遊戲
- css3小球上下移動效果CSSS3
- 可以隨心所欲的canvas粒子特效Canvas特效
- canvas 實現光線沿不規則路徑運動Canvas
- 用 canvas 做一個 DVD 待機動畫Canvas動畫
- 【動畫進階】單標籤下多色塊隨機文字隨機顏色動畫動畫隨機
- 運動去手機
- 隨機與和未知的互動隨機
- 【不可思議的前端】動如脫兔的小球前端
- 移動機器人運動規劃及運動模擬機器人
- 小球彈彈樂
- 機器人運動學機器人
- #大齡程式設計師失業,找工作屢屢碰壁,隨即感慨:人到中年不如狗程式設計師
- canvas動畫心得Canvas動畫
- canvas水球動畫Canvas動畫
- python生成隨機數、隨機字串Python隨機字串
- 專案實戰:Qt球機控制工具(球機運動八個方向以及運動速度,運動指定角度QT
- 隨機生成三百道四則混合運算題目程式隨機
- 教你如何運用golang 實現陣列的隨機排序Golang陣列隨機排序
- “秒回”習慣碰壁的思考
- 基於canvas繪製的一個跟隨滑鼠變幻的動態背景線條Canvas
- Linux Shell 生成隨機數和隨機字串Linux隨機字串
- 隨機數隨機