canvas实现蜘蛛网效果
代码语言:html
所属分类:背景
代码描述:canvas实现蜘蛛网效果
代码标签: 效果
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body translate="no"> <script type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/Stats-16.js"></script> <script type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/dat.gui-min.js"></script> <script> /*############################################################################*/ console.clear(); function lerp(a, b, p) { return [ a[0] + (b[0] - a[0]) * p, a[1] + (b[1] - a[1]) * p]; } setTimeout(() => { class MyGE extends GE { initGame() { // *** GUI *** this.addGui('factor', 0.7, 0, 2, 0.1); this.addGui('nStrings', 16, 1, 50, 1); this.addGui('rows', 10, 1, 50, 1); this.addGui('clear', 1, 0, 1, 0.1); this.addGui('reset', this.resetGame); } resetGame() { // *** VARIABLES *** this.frame = 0; console.log('reset'); //this.canvas.focus(); } render() { let { ctx, w, h } = this; ctx.fillStyle = `rgba(0,0,0, ${this.clear})`; ctx.fillRect(0, 0, w, h); let vr = Math.min(w, h) / 2; ctx.translate(w / 2, h / 2); const { nStrings, rows, factor } = this; let aStep = Math.PI * 2 / nStrings; let rStep = vr / rows / nStrings; let angle = 0; let r = 0; while (r < vr) { let a = [ Math.cos(angle) * r, Math.sin(angle) * r]; let b = [ Math.cos(angle + aStep) * (r + rStep), Math.sin(angle + aStep) * (r + rStep)]; let c = lerp([0, 0], lerp(a, b, 0.5), factor); ctx.beginPath(); ctx.moveTo(...a); ctx.quadraticCurveTo(...c, ...b); ctx.strokeStyle = '#f00'; ctx.stroke(); angle += aStep; r += rStep; } for (let i = 0; i < nStrings; ++i) { let a = [ Math.cos(Math.PI * 2 / nStrings * i) * vr, Math.sin(Math.PI * 2 / nStrings * i) * vr]; ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(...a); ctx.strokeStyle = '#f00'; ctx.stroke(); } ++this.frame; } control() { let { keys } = this; if (keys.has('Mouse0')) { this.resetGame(); } }} // end MyGE window.ge = new My.........完整代码请登录后点击上方下载按钮下载查看
网友评论0