Sto provando a creare un'animazione su tela. La prima volta ha funzionato bene, ma quando un nuovo elemento è stato aggiunto attraverso setTimeout, tutta la velocità degli elementi è aumentata. Qualcuno può dirmi perché questa velocità è in aumento. Fiddle LinkL'animazione tela HTML5 non funziona correttamente
var canvas = $("#canvas")[0],
context = canvas.getContext("2d"),
bloons = {},
bloonIndex = 0;
var c_wdh = 360,
c_hgt = 540;
function createBloon(x, y) {
this.x = x;
this.y = y;
this.vx = 1,
this.vy = 3;
bloonIndex++;
bloons[bloonIndex] = this;
this.id = bloonIndex;
}
createBloon.prototype.drawImage = function() {
this.y -= this.vy;
context.fillStyle = "#FF0000";
context.fillRect(this.x, this.y, 50, 50);
if(this.y <= -120){
delete bloons[this.id];
}
};
var nob = 0;
var i = 1;
var rendorBloon = setInterval(function(){
bloons[i] = new createBloon(Math.random() * c_wdh, c_hgt);
var animate = setInterval(function() {
context.clearRect(0, 0, c_wdh, c_hgt);
for (var i in bloons){
bloons[i].drawImage();
}
}, 30);
i++;
nob++;
if(nob >= 10){
clearInterval(rendorBloon);
}
}, 1000);
si sta chiamando setInterval all'interno di un setInterval, idea sbagliata ... Inoltre, per l'animazione, utilizzare ['requestAnimationFrame()'] (https://developer.mozilla.org/en/docs/Web/API/window. requestAnimationFrame), setInterval non è davvero il metodo giusto se si ha a che fare con qualsiasi cosa in base al tempo. – Kaiido
È necessario chiamare il secondo setInterval al di fuori del primo https://jsfiddle.net/v5eoeybe/5/ – jcubic
@jcubic grazie ora. –