2011-11-19 20 views
7

मुझे आश्चर्य है कि मुझे अनुरोध करने के लिए मेरा गेम स्विच करना चाहिए एनीमेशन फ्रेम। यदि अभी भी ऐसा करने का कोई कारण अभी भी है, जैसा कि मैंने पढ़ा है कि setTimeout() अब भी प्रमुख ब्राउज़र में टैब स्विच करते समय रोक देता है।मेरी एनीमेशन के एफपीएस को नियंत्रित करने के लिए अनुरोध के चरण में setTimeout का उपयोग जारी रखने का एक अच्छा कारण है AnnationFrame?

वैसे भी, मैं कहता हूं कि मैं अपने एनीमेशन के एफपीएस को नियंत्रित करना चाहता हूं। कहाँ k.settings.engine.fps वांछित एफपीएस है

k.state.loopinterval = 
window.setInterval(renderLoop(), 1000/k.settings.engine.fps); 

:

वर्तमान में मैं इस तरह कर सकते हैं।

अगर मैं यह requestAnimationFrame तरह से करते हैं, मुझे लगता है कि संभावना खो देते हैं, और यह सिर्फ मुझे जो कुछ भी यह दे सकते हैं प्रदान करेंगे:

window.requestAnimFrame(k.operations.startLoop); 
renderLoop(); 

मैंने देखा है कुछ लोगों को एक और पाश में requestAnimFrame जगह करने के लिए सुझाव:

setInterval(function() { 
    requestAnimationFrame(draw); 
}, 1000/60); 

तो ... मुझे किसके साथ जाना चाहिए? जैसा है वैसा ही छोड़ दो?

अनुरोध एनीमेशन फ्रेम के सटीक लाभ क्या हैं, अब टैब सेट करते समय सेटटाइमआउट भी रुक गया है?

उत्तर

5

अनुरोधएनीमेशन फ्रेम एनिमेशन बनाने के लिए सही तरीका है।

क्यों?

क्योंकि ब्राउजर एक चिकनी एनीमेशन बनाने के लिए रेंडर अनुकूलित कर सकता है। सवाल का जवाब, एक और तरीका है:

window.requestAnimFrame = (function(){ 
    return window.requestAnimationFrame  || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      window.oRequestAnimationFrame  || 
      window.msRequestAnimationFrame  || 
      function(callback, element){ 
      window.setTimeout(callback, 1000/60); 
      }; 
})(); 

और नीचे दिए गए लिंक में एक और तरीका है।

जब आप अनुरोध एनीमेशन कहते हैं, तो आप ब्राउज़र को समझते हैं कि HTML को फिर से निकालने का क्षण कब होता है। यदि आप सीएसएस में एनीमेशन/संक्रमण करते हैं और अनुरोध का उपयोग करते हुए सामान को स्थानांतरित करते हैं या पृष्ठभूमि (स्प्राइट्स के रूप में) बदलते हैं, तो एनीमेशन जब आप अनुरोध कॉल करते हैं तो रेंडर काम करता है। इसके बिना, ब्राउजर उस समय कुछ भी प्रस्तुत करेगा, फिर आवश्यकतानुसार और अधिक रेड्रॉव क्या कर सकता है।

यहां तक ​​कि, ब्राउज़र जिस तरह से चल रहा है, वैसे भी यह अधिक अनुकूलन करेगा जो हम अभी तक नहीं जानते हैं। ब्राउजर को समझें कि हम क्या कर रहे हैं और फिर वे हमारी मदद करते हैं।

मुझे this link मिला, कुछ और विचार जोड़ सकते हैं