2012-12-18 63 views
18

मोबाइल उपकरणों के लिए कैनवास एनीमेशन के साथ एचटीएमएल 5 गेम्स के लिए।सेटटाइमआउट या सेट इंटरवल या अनुरोधएनीमेशन फ्रेम

मुझे कुछ प्रदर्शन समस्याओं का सामना करना पड़ रहा है जो प्रत्येक डिवाइस और दूसरों के बीच की गति को अलग करते हैं।

अनुरोधएनीमेशन फ्रेम डिवाइस की गति के अनुसार गेम की एनीमेशन को गति देता है।
setInterval ने मुझे चौंका दिया कि डिवाइस से दूसरे में देरी हो रही है।
सेटटाइमआउट कैनवास पर ड्राइंग धीमा भी है।

मोबाइल HTML5 गेम के साथ पिछले अनुभव किसने किया था, कैनवास पर एनीमेशन विकसित करने के लिए विभिन्न मोबाइल उपकरणों पर स्थिर होने के लिए मुझे उनमें से तीन का सर्वश्रेष्ठ तरीका (या उपलब्ध होने पर अन्य तकनीकों) को फेंकने का मार्गदर्शन कर सकता है?

उत्तर

19

हमेशा संभव होने पर requestAnimationFrame का उपयोग करें, क्योंकि इसका यही अर्थ है। यह use a shim for support के लिए सबसे अच्छा है जब यह नहीं है, इसलिए आपको विशिष्ट विवरणों से निपटने की आवश्यकता नहीं है।

वास्तविक विधि के बावजूद एक ही गति पर एनीमेशन या गेम तर्क के लिए, आपको भौतिकी या ऐसे समय के लिए समय आधारित एनीमेशन और समय-आधारित गणनाओं का उपयोग करना चाहिए।

+0

एंड्रॉयड फोन ब्राउज़रों पर पुराने संस्करणों के लिए इस समारोह requestAnimationFrame (HTC) का समर्थन नहीं करता .... मैं इस साइट की कोशिश http://ie.microsoft.com/testdrive /Graphics/RequestAnimationFrame/Default.html एचटीसी डिवाइस पर और यह समर्थित नहीं है !! – Solieman

+1

@ सोल्मन पॉल आयरिश के पास एक अनुरोध के साथ एक महान ब्लॉग पोस्ट है एनीमेशन फ़्रेम शिम: http://paulirish.com/2011/requestanimationframe-for-smart-animating/ – Jasper

+0

@ सोल्मैन कोड जो मैंने लिंक किया है (शिम) सही का उपयोग करने का ख्याल रखता है तरीका। अगर 'अनुरोध एनीमेशन फ्रेम' समर्थित नहीं है, तो यह स्वचालित रूप से अन्य विधियों में से एक का उपयोग करेगा। जैस्पर के लिंक पर इसके बारे में अधिक जानकारी है। –

13
window.requestAnimFrame = function(){ 
    return (
     window.requestAnimationFrame  || 
     window.webkitRequestAnimationFrame || 
     window.mozRequestAnimationFrame || 
     window.oRequestAnimationFrame  || 
     window.msRequestAnimationFrame  || 
     function(/* function */ draw1){ 
      window.setTimeout(draw1, 1000/60); 
     } 
    ); 
}(); 
    window.requestAnimFrame(draw); 
})(); 

उपयोग सभी मामलों

+0

'1000/60' क्या करता है? क्यों न केवल एक साधारण 'परिणामस्वरूप/मूल्यांकन' आंकड़ा? और इसके अलावा मूल पोस्टर को क्रेडिट दिए बिना ['GitHub'] (https://gist.github.com/mrdoob/838785) से एक प्रतिलिपि समाधान है –