在語音聊天原始碼中實現一個滿天星效果,應該如何做?
思路
整體思路是通過在canvas上繪製許多小圓點,然後開啟一個定時器移動所有小圓點,同時監聽滑鼠位置,當滑鼠位置與小圓點的位置小於某個設定值時,就用一條直線將它們連線起來。這樣就能在語音聊天原始碼中實現一個滿天星效果了。
1、定義初始值
var width = document.documentElement.clientWidth; var height = document.documentElement.clientHeight; var canvas = document.getElementById("myCanvas"); // 獲取畫筆 var ctx = canvas.getContext("2d"); // 設定寬高 canvas.width = width; canvas.height = height; // 改變填充色 ctx.fillStyle = "white"; // 改變線條顏色 ctx.strokeStyle = "rgba(255, 255, 123, .5)"; // 改變線寬 ctx.lineWidth = ".3";
2、定義星星類
引數依次為(畫筆,x座標,y座標,半徑),並且定義一個隨機的控制速度和方向的值(如下):
function Star(ctx, x, y, r) { this.ctx = ctx; this.x = x; this.y = y; this.r = r; this.x_speed = ((parseInt(Math.random() * 3) + 1) * Math.pow(-1, parseInt(Math.random() * 10) + 1)) / 5; this.y_speed = ((parseInt(Math.random() * 3) + 1) * Math.pow(-1, parseInt(Math.random() * 10) + 1)) / 5; }
然後在它的原型上新增移動的方法,上面的隨機速度值就起到了作用:
Star.prototype.move = function () { this.x += this.x_speed; this.y += this.y_speed; };
再新增渲染方法:
Star.prototype.render = function () { this.ctx.beginPath(); this.ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2); this.ctx.closePath(); this.ctx.fill(); };
此時星星會出語音聊天原始碼的顯示區域,我們需要邊界判斷,到達邊界則用相反的速度值:
Star.prototype.changeX = function () { this.x_speed = -this.x_speed; }; Star.prototype.changeY = function () { this.y_speed = -this.y_speed; };
3、例項化100顆星星
當物件比較多的時候,用陣列來儲存:
var arr = []; for (var i = 0; i < 100; i++) { arr.push( new Star(ctx, Math.random() * width, Math.random() * height, 1) ); }
4、建立滑鼠位置的星星
根據效果,還有一顆星星位於滑鼠的頂點,通過滑鼠移動事件來觸發,實時獲取頂點位置:
var mouse_star = new Star(ctx, 0, 0, 2); document.onmousemove = function (e) { var mouse_x = e.clientX; var mouse_y = e.clientY; mouse_star.x = mouse_x; mouse_star.y = mouse_y; };
5、開啟定時器動畫
第一步是清屏,可以理解為動畫是每一幀畫面的集合,進行下一幀時,如果不清除前面幀的動畫,則星星會變成向四處發生的射線:
// 定時器 var timer = setInterval(function () { // 清屏 ctx.clearRect(0, 0, width, height); // 渲染滑鼠星星 mouse_star.render(); arr.forEach(function (value, index) { value.move(); // 判斷邊界 if (value.x < 0 || value.x > width) { value.changeX(); } if (value.y < 0 || value.y > height) { value.changeY(); } value.render(); }); arr.forEach(function (value, index) { for (var i = index + 1; i < arr.length; i++) { if ( Math.abs(value.x - arr[i].x) < 50 && Math.abs(value.y - arr[i].y) < 50 ) { line(value.x, value.y, arr[i].x, arr[i].y); } } // 判斷星星與其它所有星星之間的關係 if ( Math.abs(value.x - mouse_star.x) < 150 && Math.abs(value.y - mouse_star.y) < 150 ) { // 連線 line(value.x, value.y, mouse_star.x, mouse_star.y); } }); }, 20); // 封裝函式,傳遞兩個點,繪製兩個點之間的線段 function line(x1, y1, x2, y2) { // 開啟路徑 ctx.beginPath(); // 移動畫筆到某個位置 ctx.moveTo(x1, y1); // 繪製路徑 ctx.lineTo(x2, y2); // 關閉路徑 ctx.closePath(); // 描邊 ctx.stroke(); }
6、加一個滑鼠點選的效果
滑鼠點選的時候,在滑鼠的位置向四面八方發射5顆星星,也就是繼續向陣列中新增5顆星星,但是不能光建立,隨著點選次數越來越多,容易卡死,所以當在語音聊天原始碼中建立的時候,移除掉相應個數的星星:
document.onmousedown = function (e) { var mouse_x = e.clientX; var mouse_y = e.clientY; for (var i = 0; i < 5; i++) { arr.push(new Star(ctx, mouse_x, mouse_y, 1)); arr.shift(); } };
以上便是“如何在語音聊天原始碼中實現一個滿天星效果?”的全部內容,看起來是不是很簡單,希望能對大家開發語音聊天原始碼有幫助。
本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2841565/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 實現一個簡單的語音聊天室(原始碼)原始碼
- 在相親原始碼的多人音視訊聊天中插入現場直播的實現方式原始碼
- C# 實現語音聊天C#
- 婚戀app原始碼實現多賬號統一登陸,應該如何做?APP原始碼
- HTML5 語音聊天 IM|仿微信語音介面|搖一搖效果HTML
- 語音陪玩原始碼如何做到不卡頓?原始碼
- 語音聊天系統原始碼有哪些特色功能原始碼
- 語音聊天系統原始碼如何才能快速搭建原始碼
- 實現一個簡單的視訊聊天室(原始碼)原始碼
- Android端實現多人音視訊聊天應用(一)Android
- 兩個機器人聊天對話實現原始碼機器人原始碼
- 相親交友原始碼中語音連麥的實現方式,值得一看原始碼
- 在程式碼中實現android:tint效果Android
- 短視訊原始碼,在Android 中opengl es實現燈光效果原始碼Android
- 在 Unity 多人遊戲中實現語音對話Unity遊戲
- 一對一聊天軟體原始碼,實現各個子介面跳轉和傳參原始碼
- 如何基於 ZEGO SDK 實現 Flutter 一對一音視訊聊天應用?GoFlutter
- 如何基於 ZEGO SDK 實現 Windows 一對一音視訊聊天應用GoWindows
- 如何在遊戲陪玩系統原始碼中聊天室內實現一個禮物系統?遊戲原始碼
- jQuery夜晚天空滿天星星閃爍動畫程式碼jQuery動畫
- 一對一聊天原始碼,vue實現環形進度條元件原始碼Vue元件
- 在PB應用中實現聲音與動畫 (轉)動畫
- 原生JAVA即時通訊系統原始碼語音視訊聊天軟體Java原始碼
- 如何基於 ZEGO SDK 實現 Android 一對一音視訊聊天應用GoAndroid
- Lru在Rust中的實現, 原始碼解析Rust原始碼
- 實現一個webscoket聊天系統Web
- php 聊天一對一聊天功能原始碼PHP原始碼
- MRCP在美團語音互動中的實踐和應用
- 【專案原始碼】- 【區域網聊天】android實現區域網聊天 - UDP實現原始碼AndroidUDP
- 一對一聊天平臺原始碼,實現冪等的8種方案原始碼
- 聊天平臺原始碼,聊天平臺如何獲取到音訊流原始碼音訊
- 手動實現一個promise(原始碼)Promise原始碼
- 相親交友原始碼中,音訊AAC解碼的實現程式碼原始碼音訊
- 在Golang中實現Actor模型的原始碼 - GauravGolang模型原始碼
- 實現語音社交原始碼介面效能優化,從索引入手原始碼優化索引
- Web開發中很實用的10個效果【附原始碼】Web原始碼
- 實現一個煙花效果
- 聊天室軟體原始碼中封裝一個金額輸入框元件的實現原始碼封裝元件