Oneshot Gems
अभी खेलें

गेम डेवलपर के लिए

गति को समय पर निर्भर बनाएं, फ़्रेम गिनती पर नहीं

डेल्टा समय अद्यतनों के बीच बीता हुआ समय है। किसी वेग को बीते हुए सेकंड से गुणा करने पर एक वस्तु को एक सेकंड के दौरान समान दूरी तय करने की सुविधा मिलती है, चाहे ब्राउज़र 45 फ्रेम खींचता हो या 144। मुश्किल हिस्सा यह तय करना है कि जब बीता हुआ समय असामान्य रूप से बड़ा हो जाए तो क्या करना चाहिए। यदि कोई टैब निलंबित कर दिया गया था या किसी महंगे कार्य ने मुख्य थ्रेड को अवरुद्ध कर दिया था, तो पूरे अंतर को आँख बंद करके लागू करने से एक छलांग लग सकती है जो गणितीय रूप से सुसंगत है लेकिन खेलने के लिए अप्रिय है।

इस पृष्ठ पर

इकाइयों को कोड में दृश्यमान रखें

एक समय इकाई चुनें और लगातार उसी का उपयोग करें। यदि गति पिक्सेल प्रति सेकंड में और डेल्टा सेकंड में है, तो स्थिति गति × डेल्टा के बराबर आगे बढ़ती है। हाथ से जाँचने के लिए 80 पिक्सेल प्रति सेकंड पर सेट मार्कर को दस सेकंड चलाएँ: रेंडर की संख्या से स्वतंत्र होकर उसे गेम-वर्ल्ड में लगभग 800 पिक्सेल चलना चाहिए।

performance.now() के मिलीसेकंड को प्रति-सेकंड गति के साथ सीधे न मिलाएँ; पहले 1,000 से भाग दें। deltaSeconds या speedPixelsPerSecond जैसे नामों में इकाइयाँ शामिल करें, ताकि बाद का बदलाव छोटी गति को चुपचाप हज़ार गुना न कर दे।

लंबे ठहराव का प्रभाव सीमित करें

सरल एक्शन गेम में डेल्टा की सोच-समझकर चुनी गई अधिकतम सीमा रखें और भारी लोड के दौरान सिमुलेशन के थोड़ी देर धीमा होने को स्वीकार करें। दोहराए जा सकने वाले चरणों वाली भौतिकी सिमुलेशन में समय जमा करें और निश्चित अंतराल से आगे बढ़ें; समय की भरपाई करने वाले अपडेट की संख्या सीमित रखें ताकि रिकवरी प्रक्रिया पेज को व्यस्त न कर दे। दोनों तरीकों के अलग-अलग लाभ और लागत हैं; गेम के अनुभव और नियमों के अनुसार चुनें।

अपडेट के बीच कृत्रिम विराम डालकर जाँचें, फिर सीधी गति और रास्ते के अंत में टक्कर की तुलना करें। यदि वस्तु पतली बाधा को पार कर जाती है, तो छोटे उपचरण या swept collision test की ज़रूरत हो सकती है। केवल रेंडर दर बदलने से नियम-स्तर की समस्या ठीक नहीं होगी।

⁨गेम में डेल्टा टाइम⁩ से जुड़े सवाल

क्या डेल्टा समय भौतिकी को नियतिवादी बनाता है?

नहीं। बदलते अपडेट अंतराल से एकीकरण के अलग-अलग परिणाम आ सकते हैं। निश्चित सिमुलेशन चरण से दोहराव बेहतर होता है, लेकिन इनपुट का समय और floating-point गणना के विवरण भी मायने रखते हैं।

कौन सी घड़ी को बीता हुआ समय बताना चाहिए?

एनीमेशन कॉलबैक टाइमस्टैम्प या performance.now() का उपयोग करें; MDN दोनों को उच्च-रिज़ॉल्यूशन समय स्रोत बताता है। छोटे फ़्रेम अंतराल के लिए कैलेंडर तारीखें न लें, क्योंकि सिस्टम घड़ी के बदलाव का सिमुलेशन समय से संबंध नहीं है।

आगे पढ़ें

कोई पुरानी जानकारी दिखी? सुधार की जानकारी दें

खेलते रहें।

मुफ़्त ब्राउज़र गेम, जब आपका मन हो तब खेलें। कुछ मज़ेदार खोजें और उसे अपना अगला पसंदीदा बनाएँ।

अपनी जिज्ञासा के साथ आगे बढ़ें