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
- js隨機運動小球效果JS隨機
- canvas小球拋物線運動Canvas
- canvas小球隨機漂浮碰撞程式碼例項Canvas隨機
- JavaScript小球碰壁詳解JavaScript
- canvas小球擺動效果Canvas
- JavaScript隨機漂浮碰壁效果JavaScript隨機
- canvas實現的隨機生成漂浮小球程式碼例項Canvas隨機
- WebAssembly Demo之Canvas中隨機運動圓球WebCanvas隨機
- canvas小球落地彈動效果Canvas
- 自定義隨機顏色的圓形小球view隨手指移動隨機View
- canvas小球亂撞Canvas
- 奇妙的canvas:彈跳小球Canvas
- canvas 四處亂竄的小球Canvas
- canvas隨機生成星星(轉)Canvas隨機
- 180行JavaScript程式碼實現的小球隨機移動程式碼JavaScript隨機
- canvas繪製小球漸隱漸現Canvas
- canvas圓形隨機漂浮效果Canvas隨機
- canvas小球旋轉loadding載入效果Canvas
- 自定義圓形View:實現跟隨手指移動的小球View
- canvas水平勻速運動效果Canvas
- 協程實現canvas影像隨機閃爍Canvas隨機
- 運用JS 實現隨機點名 (隨機點名)JS隨機
- canvas實現的彈力小球效果程式碼例項Canvas
- JavaScript 元素跟隨滑鼠運動JavaScript
- canvas繪製太陽系運動效果Canvas
- 【canvas】箭頭跟隨滑鼠移動的動畫原理Canvas動畫
- HTML5中canvas實現小球擊打小方塊遊戲HTMLCanvas遊戲
- canvas繪製滑鼠懸浮可以變大的立體小球Canvas
- 作業:隨機四則運算隨機
- 碰壁Spark + MongodbSparkMongoDB
- canvas實現的小球四壁碰撞效果程式碼例項Canvas
- css3小球上下移動效果CSSS3
- postgresql隨機啟動設定SQL隨機
- 運動去手機
- HTML5畫布canvas隨機生成圓形和正方形HTMLCanvas隨機
- 可以隨心所欲的canvas粒子特效Canvas特效
- canvas 實現光線沿不規則路徑運動Canvas