शॉन और ब्लू के भौतिक प्लेटफ़ॉर्म सीमाओं और प्रो-कॉन निर्णयों के बारे में उत्कृष्ट उत्तरों के साथ, मैं एक टिप्पणी को एक अलग दृष्टिकोण में विस्तारित करने जा रहा हूं:
क्यों आप शायद बस पूरी तरह से स्तर पुनः लोड करना चाहिए
तो आप अपने loadLevel () कॉल को पूरी तरह से काम कर रहे हैं, हाँ! आप एक स्तर फ़ाइल जानकारी में स्ट्रीम करते हैं, और इसके आधार पर दुनिया के निर्माण के माध्यम से कदम रखते हैं, ऑब्जेक्ट बनाते हैं और जाते समय बनावट और ध्वनियों को लोड करते हैं। फिर, जब यह सब किया जाता है - या नाटक शुरू करने के लिए "पर्याप्त" किया जाता है, तो आप startPlay () कहते हैं और आपकी दुनिया का पता चलता है और आपका संगीत बजना शुरू हो जाता है।
अब जब आप स्तर के साथ किए जाते हैं, या मेनू से बच जाते हैं, या गेम से बाहर निकलते हैं, तो आप उन सभी संसाधनों और मेमोरी को खाली करने के लिए अनलोड () कहते हैं, जो आप एक चिकनी अनुभव की अनुमति देने के लिए पकड़े हुए हैं।
अब, क्या होता है जब आप "रिस्टार्ट स्तर" सुविधा जोड़ना चाहते हैं? कुंआ...
unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();
और आप कर रहे हैं! कोई नया कोड नहीं, बस कुछ सरल फ़ंक्शन अधिकतम पर कॉल करते हैं, और आपने पहले से ही लिखा है और सभी को डीबग किया है ताकि अब आपका नया चमकदार रिस्टार्ट फ़ीचर आपकी सूची से पार हो जाए, और शायद फिर कभी सामना न किया जाए - cruftless, गैर-जंगी कोड सबसे अच्छा प्रकार है! कोड को पुनः आरंभ करें चिरस्थायी लिवेल () फ़ंक्शन में ले जाएं और आप उस कोड को दूर कर सकते हैं और इसे फिर कभी नहीं देख सकते हैं - शायद यह सुनिश्चित करने के बाद कि पुनरारंभ करने के लिए एक स्तर है, ज़ाहिर है :)
लेकिन तब आपको आश्चर्य होता है कि अगर यह बेकार नहीं है, तो आप जिन चीजों को फिर से लोड कर रहे हैं, उन्हें फिर से लोड करना है। ठीक है, यदि आपके स्तर और संसाधन छोटे हैं, तो आपको सबसे अधिक लाभ उठाना होगा, हर बार लोड के कुछ सेकंड के लिए "रिस्टार्ट" को धीमी प्रणालियों (और शायद पुराने स्मार्टफोन) पर भी कहा जाता है, तो कौन परवाह करता है? "समयपूर्व अनुकूलन", आपको अपने समय के साथ करने के लिए बेहतर चीजें मिली हैं।
आह, लेकिन अब आपके स्तर बढ़ रहे हैं और आपके बनावट अधिक विस्तृत होते जा रहे हैं और साउंडट्रैक 512kbps में हर आवाज और संगीतमय परत के लिए अलग-अलग चैनलों के साथ फट गया (यह उस समय एक अच्छा विचार जैसा लग रहा था, हालांकि आपको याद नहीं है कि क्यों। ..) और "स्टेट-ओरिजिनल डिपेंडेंट वोकेल रे ट्रेसिंग मल्टीडायमेंशनल फूरियर ट्रांसफॉर्म मैट्रिसेस" के बारे में कुछ ऐसा जो आपको लगता है कि अभी पूरी तरह से बना है और असली चीज नहीं है, और लेवल लोडिंग वास्तव में थोड़ी देर लगती है और इसकी शुरुआत आपको परेशान करती है। आपने वास्तविक लोगों के साथ भी परीक्षण किया है और वे वास्तव में इसी तरह के खेल से भी बदतर समय के लिए एक अरुचि दिखाते हैं (आप एक MMORPG राजधानी की उम्मीद नहीं कर रहे हैं 100 खिलाड़ियों के साथ <2 सेकंड में पूरी तरह से लोड करने के लिए? और यह एक समस्या है।
तो आप कैसे अनुकूलन करते हैं? ठीक है, अगर स्तर को फिर से लोड करना एक समस्या है, तो क्या स्तर लोडिंग समस्या नहीं है ? यदि आपको लगता है कि यह सिर्फ पुनः लोड हो रहा है, तो पृथ्वी पर लोग आपके स्तर को इतनी अधिक बार क्यों लोड कर रहे हैं, जबकि वे सिर्फ पहली जगह में स्तर को लोड करते हैं? एक गेम खेलने की समस्या की तरह लगता है, न कि एक कोड-इंजीनियरिंग समस्या। कौन सोचता है कि इसका मज़ा बार-बार एक स्तर को फिर से लोड करने के लिए है, और बस इच्छा है कि यह पूरी तरह से परिहार्य के बजाय तेज था ?
पहले असली समस्या को ठीक करो!
लेकिन यह कहते हैं कि आपका गेम डिज़ाइन किया गया है, इसलिए आपको कम से कम कभी-कभी पुनरारंभ करना चाहिए, और लोड समय काफी लंबा है कि इसका ओके एक बार और पूरी तरह से अपरिहार्य है, लेकिन आप इसे फिर से नहीं करना चाहते हैं। यह किस तरह का खेल है? एक अजीब सी समस्या की तरह लगता है ... शायद एक उच्च-रिज़ॉल्यूशन पोर्टल जैसा गेम जहां इसकी कल्पना आपको पहेली को बार-बार गड़बड़ाने वाली है?
सबसे पहले, आपको यह महसूस करना होगा कि यह तुच्छ नहीं है। आपको पूरी तरह से नया, अनुपयोगी कोड लिखना होगा, और यह "स्टेट-डिपेंडेंट" है, ताकि आपको पता भी न चले कि क्या स्तर के नाटकों के बीच पुन: उपयोग होने जा रहा है या नहीं। क्या आपके स्तर में यादृच्छिक तत्व, स्पॉन, चर बनावट (आपके कंकाल केवल कभी-कभी कवच पहनते हैं?), या अन्य बदलते तत्व हैं? क्या ऐसी चीजें हैं जो खिलाड़ी के साथ बदलती हैं, जैसे एक संगठन या अनुकूलित मॉडल या रंग / दरवाजे / जाल?
आप तुलना करने जा रहे हैं, और उनमें से बहुत सारे हैं। आप स्तर के तत्वों के माध्यम से लूपिंग करने जा रहे हैं, इस बात की तुलना करना कि क्या जरूरत होगी बनाम क्या अभी लोड किया गया है (आप उस सामान के साथ क्या करते हैं जो पिछले स्तर के लिए लोड किया गया था, लेकिन इस एक के लिए नहीं - उन्हें जारी रखें या भविष्य को रोकने के लिए पकड़ लें। भार?)। यदि यह वास्तव में आपके खेल के लिए एक बड़ी बात है, तो आप शायद अपना लोड / अनलोड कोड बदलना चाहते हैं, यह देखने के लिए कि क्या कुछ लोड होने से पहले ही लोड हो गया है (कोड को बहुउद्देशीय बना रहा है, लेकिन संभवतः पहले से काम कर रहे फीचर्स और कार्यों के लिए नए बग पेश कर रहा है ध्यान से जारी संसाधनों है कि निकट भविष्य में उपयोग में नहीं जा रहे हैं)। आह।
कोई फर्क नहीं पड़ता कि आप क्या करते हैं, भले ही आपका गेम सरल हो, आप अस्पष्ट बग्स में जाने वाले हैं जो स्तर / खिलाड़ी स्थिति पर आधारित होते हैं जब एक स्तर को फिर से शुरू किया गया था जो आपके साथ पहली बार स्तर को लोड करने के लिए नहीं होता है। इसलिए आपको टेक्स्ट के साथ गेम अपडेट लिखना होगा:
"एक टाइल पर एक बम पर एक हेलमेट को गिराना जिसके पास एक मिसाइल विस्फोट हुआ था जो कि 200 पिक्सेल पानी के भीतर भी था, अब आपके गेम डेटा को दूषित नहीं करेगा या खेल को क्रैश करने का कारण बनेगा।"
असली कारण अधिकांश खेल परेशान नहीं करते
क्या आपने कभी गौर किया है कि ज्यादातर लोग बस आधार परत से नीचे उतरने के बजाय अपनी मौजूदा दीवारों पर पेंट या ड्राईवॉल करते हैं, या ऊपर खींचने के बजाय दृढ़ लकड़ी के फर्श के ठीक ऊपर कालीन बिछाते हैं?
साधारण तथ्य यह है कि यह कम से कम इनाम के लिए अधिक काम है। अपनी मौजूदा दीवारों पर चित्रकारी करना ज्यादातर समय ठीक रहता है , और दृढ़ लकड़ी के फर्श को उखाड़ने का मूल्य अक्सर न्यूनतम या कोई नहीं होता है।
सॉफ्टवेयर में भी यही बात है, गेम्स से लेकर मल्टीमीडिया पॉवर पॉइंट प्रेजेंटेशन तक - अगर आप सब कुछ करते हैं तो एक लोडिंग स्क्रीन से कुछ सेकंड की दूरी पर लोग अपना 1% समय व्यतीत करते हुए देखते हैं, तो बेहतर होगा कि आप ऐसा करने के लिए अविश्वसनीय रूप से तुच्छ हो या आपके निवेशित समय पर बहुत खराब रिटर्न।
और इसलिए अधिकांश गेम परेशान नहीं करते हैं, और मुझे बहुत सारे गेमों के बारे में सोचने में परेशानी होती है, जहां लोडिंग स्क्रीन ने एक अन्यथा अच्छा गेम कम सार्थक बनाया, कुछ चरम उदाहरणों को छोड़कर; चरम उदाहरण हैं, जहां तेजी से स्तर लोडिंग के लिए अनुकूलन करना समझ में आता है, और यह गेम का एक छोटा सा अंश है जो इसे जनता के लिए बनाता है, और शायद खेल का एक छोटा सा अंश भी है जो कोई भी कभी नहीं देखता है क्योंकि वे कभी रिलीज़ नहीं होते हैं।