मैं कैनवास में एक एनीमेशन बनाने की कोशिश कर रहा हूं। पहली बार यह ठीक काम करता था लेकिन जब सेटटाइमआउट के माध्यम से एक नया तत्व जोड़ा गया था, तो सभी तत्वों की गति में वृद्धि हुई है। क्या कोई मुझे बता सकता है कि यह गति क्यों बढ़ रही है। Fiddle Linkएचटीएमएल 5 कैनवास एनीमेशन ठीक से काम नहीं कर रहा है
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);
आप सेटइंटरवाल को एक सेट अंतराल, बुरे विचार के अंदर बुला रहे हैं ... इसके अलावा, एनीमेशन के लिए, ['requestAnimationFrame()'] (https://developer.mozilla.org/en/docs/Web/API/window का उपयोग करें। अनुरोधएनीमेशन फ्रेम), अगर आप समय के आधार पर कुछ भी निपटना चाहते हैं तो सेट इंटरवल वास्तव में उचित विधि नहीं है। – Kaiido
आपको पहले सेट के बाहर दूसरे सेट इंटरवल को कॉल करने की आवश्यकता है https://jsfiddle.net/v5eoeybe/5/ – jcubic
@jcubic धन्यवाद अब काम कर रहा है। टिप्पणी के लिए –