好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Canvas繪制浮動球效果的示例

Canvas繪制浮動球效果的示例

熱門標簽:江蘇智能電銷機器人哪家好 云南大理400電話申請官方 電銷機器人電話用什么卡 成都智能外呼系統(tǒng)平臺 四川點撥外呼系統(tǒng) 當涂高德地圖標注 南寧點撥外呼系統(tǒng)哪家公司做的好 黃島區(qū)地圖標注 鎮(zhèn)江智能外呼系統(tǒng)有效果嗎

最近關注區(qū)塊鏈方面的信息, 瞎轉悠, 偶然看到這個網(wǎng)站首頁的效果. 一堆浮動的球, 球在距離較近的時候會有感應線連接, 鼠標也可以和球產(chǎn)生感應線. 看了下是用canvas做的.

原效果 

實現(xiàn)效果

之前對svg有過很多接觸, canvas知道也可以做到很強大的渲染效果, 但是一直沒有什么使用場景給我上手的機會. 于是這次打算自己試著上手下.

另外, 之所以對這個感興趣, 一個是喜歡視覺效果類的東西, 二是喜歡類似游戲引擎那種模擬物理世界的感覺, 試想一下這些球會相互碰撞, 或者相互之間有引力斥力, 或者加上重力因素. 這個動畫還可以開不少腦洞.

github repo見這里.

Canvas

Canvas的畫圖指令很類似SVG里面的指令, 很簡單.

畫圓

ctx.beginPath();
ctx.arc(this.center.x, this.center.y, this.radius, 0, 2 * Math.PI);
ctx.fill();

beginPath開始一段路徑, arc畫一個圓, 然后fill填充顏色.

畫線

ctx.beginPath();
ctx.moveTo(from.x, from.y);
ctx.lineTo(to.x, to.y);
ctx.stroke();

同樣是beginPath開始一段路徑, moveTo移動畫筆到起點, lineTo繪制線到終點, stroke描邊.

Canvas全屏

要保持canvas一直全屏, 只要在window onload或onresize的時候重置一下canvas的寬高即可.

var canvas = document.getElementById("canvas");
function resizeCanvas() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
}
window.onload = window.onresize = resizeCanvas;

動畫

Basic animations帶我上手.

基本步驟

做動畫的四個步驟:

  1. 清除canvas內容, 通常使用clearRect()
  2. 保存canvas狀態(tài)
  3. 繪制內容
  4. 重置canvas狀態(tài)

我做的這個比較簡單, 只用到了1和3, 就是不斷地清空canvas然后重繪.

window.onload = function () {
    resizeCanvas();
    window.requestAnimationFrame(draw);
};
function cleanCanvas() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
}
function draw() {
    cleanCanvas();
    // draw stuffs.
    window.requestAnimationFrame(draw);
}

控制函數(shù)

三個可以用:

  1. window.setInterval() 如果完全不需要用戶交互, 只是不斷重繪, 用這個就夠了.
  2. window.setTimeout() 如果想要用戶操作, 如鍵盤鼠標, 影響動畫, 可以用這個. (不懂, 不是requestAnimationFrame更好么?)
  3. window.requestAnimationFrame() 告知瀏覽器下次重繪之前要做的事情, 即你自己定制的繪制操作.

MDN里面的這個例子還挺酷的. CodePen. 可以動起來的, 下面只是一個截圖.

數(shù)據(jù)結構

之前看過一點Game Engine Development, 有意識地做面向對象的封裝. 這里面用到的是非常簡單的.

最基礎的是Vector代表二維空間上的點/向量, 成員只有x, y.

在此基礎上, Circle代表圓, 成員center: Vector代表圓心, radius: number代表半徑, speed: Vector代表速度.

然后封裝一些自用的成員函數(shù)即可.

開發(fā)環(huán)境

TypeScript + Webpack + Webpack-dev-server 不復雜, 參考以下內容即可:

  1. Webpack/Getting Started
  2. Webpack/Typescript
  3. Webpack/devServer
  4. webpack-dev-server

另外, 還試用了npx, 用來運行npm的可執(zhí)行程序. 以前webpack什么的都是全局安裝的, 直接調用webpack xx即可. 如果本地安裝webpack的話, 就需要通過./node_modules/.bin/webpack來運行本地的webpack, 現(xiàn)在可以npx webpack xxx.

一個小坑

在devServer的config里面, 加入了hot: true想開啟熱更新, 結果網(wǎng)頁里面提示: [HMR] Hot Module Replacement is disabled.

發(fā)現(xiàn)是一個老坑, 需要調用的時候加上命令行參數(shù): webpack-dev-server --hot --inline

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:西寧 南京 酒泉 咸寧 十堰 淮安 佳木斯 廣西

巨人網(wǎng)絡通訊聲明:本文標題《Canvas繪制浮動球效果的示例》,本文關鍵詞  Canvas,繪制,浮動,球,效果,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Canvas繪制浮動球效果的示例》相關的同類信息!
  • 本頁收集關于Canvas繪制浮動球效果的示例的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 小宝贝荡货叫大声点奶真大视频| 在公车上玩两个极品处小说| 永久免费观看动漫入口| 蜜臀91丨国产人妻人伦图片| 我在上课他在下添的好爽| 日本AAAA片毛片免费观看视频| 《朋友夫妇:交换4》电影| 国产看片在线| 四影虎库最新8848| 女人高潮被爽到呻吟床戏视频| 亚洲人成激情在线播放| 国产高清不卡| 成人国产欧美大片一区| 五福影院凹凸一区二区| 99久久精品人妻无码一区二区三区| 国产校园春色| FuCK老妓女高潮HD| 国产精品乱码一区二区| 巨人黑人videos极品另类| 日本指交视频| 啊灬啊灬别停啊灬用力啊| 孕妇被黑人猛烈进入A片| 美国1级片| 亚洲日韩精产国品一二三| 欧美无专区| 外出2| 国产成人拍精品视频网| 欧美大尺度床戏无删减| 天天干干干| 阴阳先生之末代天师电影| 精品一区二区三区免费毛片w| 色爽网站| 男友把舌头都伸进我的嘴巴里| 粗大的内捧猛烈进出校花H漫画小| 我和漂亮的妽妽3| 初体验韩国| 宝贝嗯嗯| 特性服务4| 777午夜精品一区二区三区免费看 777午夜精品免费视频 | 一级女 1 3片A片AAA毛诱女| 粗大挺进粉嫩紧窄人妻|