Oneshot Gems
अभी खेलें

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

एक गेम लूप जो सभी डिस्प्ले पर पूर्वानुमानित रहता है

ब्राउज़र गेम लूप सिमुलेशन, ड्रॉइंग और इनपुट का समन्वय करता है, लेकिन यह नहीं मानना चाहिए कि हर स्क्रीन प्रति सेकंड समान संख्या में फ़्रेम दिखाती है। कॉलबैक अलग-अलग रिफ़्रेश दरों पर चल सकता है, छिपे हुए टैब में रुक सकता है या मुख्य थ्रेड व्यस्त होने पर देर से चल सकता है। सिमुलेशन को बीते समय पर आधारित रखें और प्रस्तुति का समय ब्राउज़र को तय करने दें। इससे गति को समझना आसान होता है और लंबे ठहराव के बाद क्या हो, यह नियंत्रित किया जा सकता है.

इस पृष्ठ पर

स्थिति में बदलाव और ड्रॉइंग को अलग रखें

अगला दृश्य अपडेट करने के लिए requestAnimationFrame का उपयोग करें और उसका टाइमस्टैम्प छोटे लूप समन्वयक को दें। बीते समय के आधार पर स्थिति, टाइमर और नियम अपडेट करें, फिर वर्तमान स्थिति ड्रॉ करें। रेंडरर को यह तय नहीं करना चाहिए कि टक्कर हुई या नहीं; टक्कर की जाँच इस बात पर निर्भर नहीं होनी चाहिए कि स्प्राइट वास्तव में ड्रॉ हुआ था या नहीं।

एक छोटे प्लेटफ़ॉर्म परीक्षण में मार्कर को चुनी हुई विश्व-इकाइयाँ प्रति सेकंड की गति से क्षैतिज रूप से चलाएँ। वही रास्ता 60 Hz और उच्च रिफ़्रेश-दर वाले डिस्प्ले पर चलाएँ। यदि समान वास्तविक समय में मार्कर एक डिस्प्ले पर अधिक दूरी तय करता है, तो गति का कुछ हिस्सा अभी भी हर कॉलबैक पर लागू हो रहा है, समय की हर इकाई पर नहीं।

विलंबित फ़्रेमों के लिए पुनर्प्राप्ति नीति चुनें

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

दोहराए जा सकने वाले बाधा-कोर्स में कॉलबैक के बीच का सबसे लंबा अंतर रिकॉर्ड करें। फिर किसी दूसरे पेज पर जाकर लौटने के बाद गेम की जाँच करें। स्पष्ट रूप से तय करें कि गेम रुके, थोड़ा समय पूरा करे या पिछली स्थिति से जारी हो; एक देर से आए फ़्रेम को यह फैसला न करने दें।

⁨ब्राउज़र गेम लूप⁩ से जुड़े सवाल

क्या ड्रॉइंग के लिए setInterval का उपयोग करना चाहिए?

विज़ुअल कार्य के लिए requestAnimationFrame का उपयोग करें क्योंकि इसे पुन: पेंट करने के लिए शेड्यूल किया गया है और आमतौर पर छिपे हुए दस्तावेज़ों के लिए इसे रोक दिया जाता है। एक टाइमर अभी भी गैर-दृश्य कार्यों को शेड्यूल कर सकता है, लेकिन इसे डिस्प्ले घड़ी के रूप में नहीं माना जाना चाहिए।

फ़्रेम टाइमस्टैम्प कहाँ से आता है?

requestAnimationFrame कॉलबैक उच्च-रिज़ॉल्यूशन टाइमस्टैम्प देता है। MDN इसके समय-निर्धारण और एक बार चलने वाले व्यवहार का वर्णन करता है। कॉलबैक गिनने के बजाय प्रगति की गणना इस टाइमस्टैम्प से करें।

आगे पढ़ें

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

खेलते रहें।

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

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