बीता हुआ समय संचित करें और सीमित अद्यतन चलाएँ
प्रत्येक एनीमेशन कॉलबैक में, बीता हुआ समय एक संचायक में जोड़ें। जबकि संचायक में कम से कम एक चरण होता है, भौतिकी को एक स्थिर अंतराल जैसे कि एक सेकंड के 1/60 तक अद्यतन करें और उस अंतराल को घटाएं। फिर नवीनतम स्थिति प्रस्तुत करें। प्रति फ्रेम कैच-अप चरणों की अधिकतम संख्या निर्धारित करें; अन्यथा एक लंबा विराम बड़े बैकलॉग का कारण बन सकता है जिसमें अधिक समय लगता है और विलंब गहराता है। स्पष्ट रूप से तय करें कि क्या अतिरिक्त समय हटा दिया गया है, सीमित कर दिया गया है, या किसी अन्य पुनर्प्राप्ति नियम द्वारा नियंत्रित किया गया है।
इकाइयों को सुसंगत रखें. यदि वेग प्रति सेकंड विश्व इकाइयों में मापा जाता है, तो इसे प्रत्येक सिमुलेशन अपडेट के अंदर निश्चित चरण से गुणा करें। समान वेग को फ़्रेम के पूरे बीते हुए समय से गुणा न करें और कई निश्चित अपडेट भी निष्पादित करें, अन्यथा गति को दो बार गिना जाएगा।
इनपुट और रेंडरिंग को अपनी सीमाओं पर संभालें
नमूना प्रत्येक सिमुलेशन चरण के लिए इनपुट रखता है या एक-शॉट क्रियाओं को तब तक कतारबद्ध करता है जब तक कि कोई चरण उनका उपभोग नहीं कर लेता। यदि दो फ़्रेमों के बीच कोई कुंजी दबाई जाती है, तो सुनिश्चित करें कि यह अगले अपडेट से पहले खो न जाए। प्रतिपादन भौतिकी अवस्थाओं के बीच अंतरण कर सकता है, जबकि टकराव और स्कोरिंग सिमुलेशन अवस्था का उपयोग करते हैं। MDN requestAnimationFrame को पुन: रंगने से पहले निर्धारित एक-शॉट कॉलबैक के रूप में वर्णित करता है और प्रगति की गणना करने के लिए इसके टाइमस्टैम्प का उपयोग करने की सलाह देता है; एक संचायक अपडेट को ठीक रखने के लिए उस टाइमस्टैम्प का उपयोग करता है।
लूप की सीमाओं का परीक्षण करें
सामान्य फ़्रेमों में समान छोटी गति और टकराव, एक सिम्युलेटेड धीमे फ़्रेम और एक लंबे ठहराव की तुलना करें। सत्यापित करें कि कोई खिलाड़ी पतली दीवार से सुरंग नहीं बनाता है, रुकने के बाद अतिरिक्त गति नहीं पकड़ता है, या कैच-अप के दौरान कई बार टकराव को ट्रिगर नहीं करता है। अपने इच्छित नियम के अनुसार टेस्ट पॉज़ और हिडन-टैब रिटर्न। यदि फिक्स्ड-स्टेप लूप सिमुलेशन को स्थिर बनाता है लेकिन उच्च गति पर टक्कर अभी भी छूट जाती है, तो रेंडर आवृत्ति को बढ़ाने के बजाय गति के अनुकूल टकराव विधि का उपयोग करें।
निश्चित टाइमस्टेप गेम भौतिकी से जुड़े सवाल
क्या एक निश्चित टाइमस्टेप नियतात्मक भौतिकी की गारंटी देता है?
नहीं, यह सिमुलेशन अंतराल को सुसंगत बनाता है, लेकिन इनपुट समय, गणित और टकराव क्रम अभी भी भिन्नता उत्पन्न कर सकता है। उन परीक्षणों के लिए उन्हें अलग से नियंत्रित करें जिन्हें दोबारा चलाने की आवश्यकता होती है।
फ़्रेम स्टॉल के बाद कैच-अप अपडेट क्यों कैप करें?
बिना किसी सीमा के, पकड़ने से बाद के फ़्रेमों पर एकाधिकार हो सकता है और देरी खराब हो सकती है। ऐसी पुनर्प्राप्ति नीति चुनें और उसका परीक्षण करें जो गेम के लिए उपयुक्त हो, जिसमें यह भी शामिल हो कि सिम्युलेटेड समय को छोड़ा जा सकता है या नहीं।
आगे पढ़ें
कोई पुरानी जानकारी दिखी? सुधार की जानकारी दें