requestAnimationFrame
बहुत कम स्तर है, यह केवल वही करता है जो आपने पहले ही कहा था: मोटे तौर पर 60fps पर कॉल किया जाता है (यह मानते हुए कि ब्राउजर उस गति को बनाए रख सकता है)। तो आम तौर पर आपको इसके ऊपर कुछ बनाने की आवश्यकता होगी, एक गेम इंजन की तरह जिसमें गेम लूप होता है।
मेरे खेल इंजन में, मैं इस (paraphased/यहाँ सरलीकृत) है:
window.requestAnimationFrame(this._doFrame);
...
_doFrame: function(timestamp) {
var delta = timestamp - (this._lastTimestamp || timestamp);
for(var i = 0, len = this.elements.length; i < len; ++i) {
this.elements[i].update(delta);
}
this._lastTimestamp = timestamp;
// I used underscore.js's 'bindAll' to make _doFrame always
// get called against my game engine object
window.requestAnimationFrame(this._doFrame);
}
तब मेरे खेल इंजन में प्रत्येक तत्व खुद को अपडेट करने के बारे में जानता है।
update: function(delta) {
this.elapsed += delta;
// has 8 seconds passed?
if(this.elapsed >= 8000) {
this.elapsed -= 8000; // reset the elapsed counter
this.doMyUpdate(); // whatever it should be
}
}
साथ requestAnimationFrame
साथ नहीं बल्कि कम स्तर हैं Canvas API, वे हैं: अपने मामले प्रत्येक तत्व है कि अद्यतन करना चाहिए में हर 2, 6, 8 सेकंड कितना समय बीत गया है का ट्रैक रखने और तदनुसार अपडेट करनी होगी एनीमेशन और गेम इंजन जैसी चीजों के लिए ब्लॉक बनाना। यदि संभव हो तो मैं इन दिनों cocos2d-js या जो कुछ भी बाहर है, मौजूदा मौजूदा का उपयोग करने का प्रयास करूंगा।
स्रोत
2012-08-13 22:25:25
धन्यवाद! यह काफी है जो मैं बाद में था। थोड़ा और खोदने से यह पता चला: https://gist.github.com/1002116 जो अनिवार्य रूप से आपके पास है। मुझे लगता है कि मेरी गलती प्रत्येक वस्तु के लिए एक लूप बनाम एक मुख्य पाश के अंदर काम करने की कोशिश कर रही थी। –