javascript - Canvas 创建两个独立的动画瀑布对象

标签 javascript canvas

我正在尝试创建一个模板来启动任意数量的瀑布对象,而不必为每个对象创建一个新的 Canvas 。我想要两个不同颜色的瀑布,但它不起作用。我不知道为什么,几个小时后我就开始了。我怎样才能使红色和蓝色瀑布都出现在第一个具有比最后一个实例更低的 z 索引的地方?

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var w = canvas.width = window.innerWidth;
var h = canvas.height = window.innerHeight;

function waterfall(color) {
    var self = this;
  this.color = color;
    this.water = [];
  this.Construct = function(y, vel, acc) {
    this.y = y;
    this.vel = vel;
    this.acc = acc;
  }

  for(var i = 0; i < 1000; i++) {
    this.water.push(new this.Construct(Math.random() * 65, 0.1 + Math.random() * 4.3, 0));
  }

  this.flow = function(color) {
    ctx.clearRect(0, 0, w, h);
    for(var i = 0; i < this.water.length; i++) {
        this.water[i].vel += this.water[i].acc;
        this.water[i].y += this.water[i].vel;
        ctx.beginPath();
        ctx.arc(0 + i * 0.5, this.water[i].y, 2, 0, Math.PI * 2, false);
        ctx.fillStyle = this.color;
        ctx.fill();
        ctx.closePath();
    }
    for(var i = 0; i < this.water.length; i++) {
      if(this.water[i].y > window.innerHeight) {
        this.water[i].y = 0;
      }
    }
    requestAnimationFrame(function() {
      self.flow.call(self);
    });
  }
  this.flow(this.color)
}

new waterfall("blue");
new waterfall("red");

这是我的工作代码: https://jsfiddle.net/testopia/d9jb08xb/5/

我再次打算创建两个独立的瀑布,但这次使用原型(prototype)继承:

<德尔> https://jsfiddle.net/testopia/d9jb08xb/8/

我确实更喜欢后者,但我无法正常工作。

最佳答案

问题是您正在清除每个瀑布中的 Canvas 。一个正在重绘另一个。您可以通过注释掉该行立即看到这一点

ctx.clearRect(0, 0, w, h);

当然,水会那样弄脏。

您必须以一种方式管理您的瀑布,即在每个动画帧中,您首先清除 Canvas 然后让它们全部绘制。 这是使用主 flow_all() 函数的快速尝试: https://jsfiddle.net/kpomzs83/

关于javascript - Canvas 创建两个独立的动画瀑布对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36196379/

相关文章:

javascript - 在 asp.net 中使用 jquery 选项卡的 OnClick 函数

javascript - 提交 ng-change 时 undefined variable

javascript - Canvas |在从 SVG 创建过程中如何设置 Canvas 元素的样式?

javascript - 在 HTML5 Canvas 上定位

javascript - 在 ZXing 库中查找坐标并在 Canvas 上输出

javascript - 通过更改鼠标移动事件的封面图像不透明度来发现隐藏图像

javascript - 为什么我得到 ngRepeat :dupes when sending data from an Array into a differently named Array?

javascript - Angular 选项选择显示隐藏 Angular 重复

javascript - 使用 pixi.js/WebGL 进行缩放时效果不佳

javascript - 如何将相机设置在网格后面