canvas 四處亂竄的小球
下面分享一個五彩繽紛,四處亂竄的小球,效果圖如下。
主要思路:使用物件導向的方法:首先定義一個球的建構函式,在函式原型上寫兩個方法:
1. 畫球的方法;
2. 球移動的方法;
然後,使用for迴圈例項化多個小球不停更新canvas畫布形成小球碰撞的景象
下面是建構函式的引數方法
// 定義一個球的建構函式
function Boll(x,y,r,color,speedx,speedy){
this.x = x; this.y = y; this.r = r; this.color = color;
this.speedx = speedx; this.speedy = speedy;
}
// 畫的方法
Boll.prototype.draw = function(){
context.beginPath();
context.arc(this.x,this.y,this.r,0,Math.PI*2);
context.fillStyle = this.color;
context.fill();
}
// 球的移動方法
Boll.prototype.move = function(){
this.x += this.speedx;
this.y += this.speedy;
// 碰壁檢測
if(this.x<this.r || this.x>canvas.width-this.r){
this.speedx *= -1;
}
if(this.y<this.r || this.y>canvas.height-this.r){
this.speedy *= -1;
}
}
封裝了兩個隨機數函式,用來隨機小球半徑,初始位置的x軸和y軸座標以及小球的顏色。
// 隨機數函式
function randNum(min,max){
return parseInt(Math.random()*(max-min) + min) ;
}
// 隨機顏色
function randColor(){
return "rgb("+randNum(0,256)+","+randNum(0,256)+","+randNum(0,256)+")";
}
使用for迴圈例項化100個物件,生成100個顏色,半徑,初始位置不同的的小球,在canvas畫布裡碰壁反彈。
var arr = [];
for(var i = 0 ; i < 100 ;i++){
var r = randNum(5,45);
var x = randNum(r,canvas.width-r);
var y = randNum(r,canvas.height-r);
var speedx = randNum(1,4);
var speedy = randNum(1,4);
var color = randColor();
var newboll = new Boll(x,y,r,color,speedx,speedy);
arr.push(newboll);
}
封裝一個act函式使用window.requestAnimationFrame()方法做動畫,與setInterval,setTimeout類似。
window.requestAnimationFrame:
概念:採用系統時間間隔,保持最佳繪製效率,不會因為間隔時間過短,造成過度繪製,增加開銷;也不會因為間隔時間太長,使用動畫卡頓不流暢。
區別:它調取cpu效能(顯示卡效能),效率高;而setInerval和setTimeout是調取瀏覽器的效能,有侷限性。
function act(){
context.clearRect(0,0,canvas.width,canvas.height);
for(var i = 0 ; i < arr.length ; i++){
arr[i].draw();
arr[i].move();
}
window.requestAnimationFrame(act);
}
act();
總結:使用物件導向方法定義了一個球的建構函式,好處在於可以在多處呼叫
相關文章
- canvas小球亂撞Canvas
- canvas小球碰壁效果Canvas
- 奇妙的canvas:彈跳小球Canvas
- canvas小球擺動效果Canvas
- canvas實現的小球四壁碰撞效果程式碼例項Canvas
- canvas小球落地彈動效果Canvas
- 《自然·通訊》:焦慮的大腦功能亂竄
- canvas小球碰壁隨機運動Canvas隨機
- canvas小球拋物線運動Canvas
- canvas繪製小球漸隱漸現Canvas
- canvas實現的彈力小球效果程式碼例項Canvas
- canvas小球旋轉loadding載入效果Canvas
- canvas小球隨機漂浮碰撞程式碼例項Canvas隨機
- canvas實現的隨機生成漂浮小球程式碼例項Canvas隨機
- canvas繪製滑鼠懸浮可以變大的立體小球Canvas
- win10滑鼠亂動不受控制怎麼辦_win10滑鼠亂竄的解決方法Win10
- HTML5中canvas實現小球擊打小方塊遊戲HTMLCanvas遊戲
- OC中字元竄操作字元
- em 出現亂碼的處理
- jsp:useBean的亂碼處理JSBean
- word列表格式錯亂的處理
- plsql顯示韓文亂碼的處理方法SQL
- jQuery AJAX中文亂碼處理jQuery
- JavaScript小球碰壁詳解JavaScript
- 使用 canvas 對影象進行處理Canvas
- MySQL:亂碼問題處理流程MySql
- oracle alert日誌亂碼處理Oracle
- java處理中文亂碼問題Java
- js小球重力和碰撞效果JS
- 小球下落-二叉樹二叉樹
- 28.Flutter:成為Canvas繪製大師(四)FlutterCanvas
- python獲取頁面亂碼時的處理Python
- Linux掛載windows下的cdrom亂碼處理LinuxWindows
- xshell終端顯示亂碼的處理方法
- 【不可思議的前端】動如脫兔的小球前端
- 高德地圖的四處進擊地圖
- AS3.0的元素處理(四)–styleSheetS3
- PHP-如何處理檔名亂碼PHP