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