Her biri için yeni bir tuval oluşturmaya gerek kalmadan, istediğim kadar çok şelale nesnesi başlatmak için bir şablon oluşturmaya çalışıyorum. Farklı renklere sahip iki şelale istiyorum ama işe yaramıyor. Nedenini anlayamıyorum ve birkaç saatten beri uğraşıyorum. Kırmızı ve mavi şelalenin, ilkinin son örneklemeden daha düşük bir z indeksi olduğu yerde nasıl görünmesini sağlayabilirim? https://jsfiddle.net/testopia/d9jb08xb/5/İki ayrı animasyonlu şelale nesnesi oluştururken tuvali oluşturma
ve burada tekrar niyetim iki ayrı şelaleler oluşturmak için ancak prototip miras bu kez: Yapmam
https://jsfiddle.net/testopia/d9jb08xb/8/
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");
İşte benim çalışma kod ikincisini tercih ederim ama sadece işe yaramıyor.