एक स्तर को फिर से शुरू करने पर गेम पूरे स्तर पर क्यों लगता है?


47

क्या वास्तव में खेलने के दौरान डेटा को संशोधित किया गया है?

मैं एक स्तर को पुनः आरंभ करने के बीच लंबे समय से ठहराव मान रहा हूँ पूरे स्तर को पुनः लोड कर रहा है। लेकिन मुझे ऐसा लगता है कि एक अच्छी तरह से लागू की गई प्रणाली सिर्फ स्तर की शुरुआत के लिए 'पिंग' कर सकती है।

यह कंसोल पर अधिक ध्यान देने योग्य है, लेकिन पीसी गेम पर इसका ध्यान नहीं है।


8
इसका उत्तर डेवलपर्स, उनकी आदतों और अनुभव और कई और कारकों पर खेल पर बहुत निर्भर करता है। एक सामान्य स्तर पर ही सही जवाब होगा: कभी कभी यह संशोधित किया गया है बहुत, कभी कभी नहीं, कभी कभी सामान में प्रदर्शित किया है और इस तरह शुरुआत स्मृति में नहीं है किसी भी अधिक, और कभी कभी खेल पहले से ही कर के स्तर शुरू करने के लिए "पिंग" वापस, और ऐसे खेल जिनमें कभी-कभी अच्छे कारण नहीं होते हैं कि वे ऐसा क्यों नहीं कर सकते हैं और कभी-कभी यह सिर्फ इसलिए होता है क्योंकि यह पर्याप्त रूप से लागू नहीं होता है।
क्रिश्चियन

4
आम तौर पर बोलना, यह बहुत आसान होता है कि खिलाड़ी ने जो कुछ भी किया है, उसके बजाय उस स्तर को पुनः लोड करें (जो अपनी प्रारंभिक अवस्था में सब कुछ डालता है)। वैसे भी मेरे अनुभव में ऐसा ही है।
बेंजामिन डेंजर जॉनसन

सवाल काला और सफेद नहीं है। कितना राज्य पुनः लोड किया गया है? बहुत सारे खेल बिना किसी अच्छे कारण के संपूर्ण बनावट सेट को फिर से लोड करते हैं। निश्चित रूप से, स्तर 5 से स्तर 6 तक जाने का मतलब हो सकता है कि नई बनावट लोड करना, लेकिन इसका मतलब यह नहीं है कि आपको हर बार (री) स्तर 6. शुरू करना चाहिए
MSalters

@MSalters यह ज्यादातर संसाधनों के बजाय गेम स्टेट के बारे में होगा, आपको एक सामान्य उपयोग टेक्स को फिर से लोड करने की आवश्यकता नहीं हो सकती है, लेकिन अधिक दुश्मन जो आपने पहले ही मार दिया है - इसके लिए ऑब्जेक्ट को नष्ट करने और इसे फिर से शुरू करने की आवश्यकता है (यहां तक ​​कि राज्य में भी) अगर उसकी बनावट अभी भी स्मृति में अच्छी तरह से संग्रहीत है।)
टॉम 'ब्लू' पिडॉक

मुझे लगता है कि किसी ने विरासत प्रणाली पर विंग कमांडर III की भूमिका निभाई है।
एरिक रेपेन

जवाबों:


54

खैर अब - एक सरल लेकिन दिलचस्प सवाल से निपटने के लिए।

जब एक स्तर को फिर से लोड किया जाता है तो बहुत सारे कारक होते हैं जिन्हें ध्यान में रखना आवश्यक है कि उत्तर कई तरीके से जा सकते हैं।

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

यह सोचने के लिए एक अच्छा उदाहरण एक फर्स्ट पर्सन शूटर होगा जो इलाके विनाश / बुलेट डिकल्स का इस्तेमाल करता था जो कि उस नाटक के दौरान एक स्थिर स्थिति थी, लेकिन अगर आप उस चेकपॉइंट या स्तर को फिर से शुरू करते हैं तो वह नहीं रहेगा

आप करना हो तो रिवाइंड स्तर के बजाय नष्ट करने और यह फिर से लोड आप प्रत्येक और हर राज्य बदल पता लगाने के लिए होगा। यदि आप एक रॉकेट के साथ दीवार में एक छेद को गोली मारते हैं तो आप दीवार से गिरने वाले टुकड़ों से भू-भाग खिंचाव उत्पन्न करेंगे, दीवार का मॉडल छेद का निर्माण करने के लिए बदल जाएगा और आपके पास कण प्रभाव पैदा होंगे जो इसे सुंदर दिखने के लिए उत्पन्न हुए थे । इसे एक "पुनः आरंभ करने योग्य" स्थिति में वापस लाकर इसे साफ करने के लिए आपको निम्न करना होगा:

  • उस दीवार के लिए किसी भी गतिशील रूप से उत्पन्न gibs को निकालें (लेकिन आपके द्वारा लोड किए गए राज्य से नहीं हटाएं)
  • बुलेट छेद से धूल के लिए कण प्रभाव निकालें
  • आपके द्वारा बनाए गए छेद से छुटकारा पाने के लिए दीवार को बदलें / मरम्मत करें
  • खिलाड़ी बारूद को रीसेट करें
  • आदि...

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

इसका मतलब है कि एक स्तर को फिर से लोड करना एक राज्य ऑब्जेक्ट (एक गेम फ़ाइल या एक मिशन स्क्रिप्ट) से डॉन्स है और डायनेमिक कैलीकुलेशन की आवश्यकता नहीं है। कंसोल्स के लिए यह डिस्क के साथ शामिल लोडिंग समय द्वारा बढ़ा दिया गया है। यह पीसी गेम्स की भी मदद करता है क्योंकि यह उन कंप्यूटरों को ध्यान में रख सकता है जिनमें लोडिंग समय को स्वीकार्य बनाने के लिए प्रॉसिंग पावर नहीं होगी।

इसलिए बड़े सामग्री स्तरों के लिए - गणना करने और "रिवाइंडिंग" करने के बजाय एक एकल राज्य लोड हो रहा है:

  • कम प्रोसेसर सघन है
  • कम टियर मशीनों पर अधिक कुशल है
  • एक मिशन स्क्रिप्ट को सक्षम करता है और फ़ाइल को उसी तरीके से उपयोग करने के लिए सहेजता है (संभावित रूप से एक समान लोडिंग सिस्टम का उपयोग एक बचत स्थिति या एक मिशन चेकपॉइंट स्थिति को लोड करने के लिए करता है जब स्तर को पुनरारंभ करें)
  • इसका मतलब है कि आपने एक स्तर को रीसेट करने के लिए एक डेवलपर के रूप में कम काम किया है - यह ट्रैक और रिवाइंड की तुलना में सत्र डेटा से पूर्ण पुनः लोड करने के लिए प्रोग्राम करना बहुत आसान है। यह शायद सबसे प्रभावशाली बिंदु है

हालांकि, एक काउंटर उदाहरण के रूप में एक फाइटिंग गेम (स्ट्रीट फाइटर 4 होने का महान वास्तविक जीवन उदाहरण) को एक स्तर को पुनः आरंभ करने के लिए उन सभी संपत्तियों को पुनः लोड करने की आवश्यकता नहीं हो सकती है। स्तर और सरल स्तर के टाइमर के लिए 2 खिलाड़ी, पर्यावरण राज्य ज्यादातर स्थिर और गतिशील नहीं होते हैं (खिलाड़ियों का स्वास्थ्य हमेशा प्रत्येक दौर में 100% पर प्रतिक्रिया देगा, टाइमर 90 सेकंड में रीसेट हो जाता है और स्तर में कोई बुलेट छेद नहीं होता है [या करता है!] ) और इसलिए स्तर को रीसेट करना सेनानियों को पूर्ण स्वास्थ्य में रखने और पर्यावरण को अपने मूल पदों पर वापस लाने का मामला है (कुछ स्तरों में दर्शकों की तरह।)

तो एक फाइटिंग गेम के लिए जब एक रीमैच कर रहे हैं (राउंड से राउंड में नहीं जा रहे हैं) आपको निम्न करने की आवश्यकता है:

  • अधिकतम या चूक के लिए स्वास्थ्य और ऊर्जा रीसेट करें (हमेशा प्रति वर्ण समान)
  • टाइमर रीसेट करें
  • अक्षर शुरू करने की स्थिति रीसेट करें
  • डिफ़ॉल्ट स्थिति में रीसेट करें (फिक्स या पुनः लोड करने के लिए कोई बुलेट छेद नहीं!)

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

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

मुझे आशा है कि इसने आपके प्रश्न पर कुछ प्रकाश डाला है।


7
शानदार जवाब ... मेरे लिए निंदक पक्ष, आपका काम करेगा: "देवों के लिए कम काम करना सूची को उच्चतर बनाता है ... लेकिन शायद इसके इंजन का कार्यान्वयन बेहतर हो सकता है।
मेष

3
इसके अलावा, बग रिकवरी के बारे में क्या? एक एनपीसी भौतिक प्रणाली में एक बग के कारण आगे नहीं बढ़ रहा है, एक स्मृति रिसाव आदि। भले ही खेल का अच्छी तरह से परीक्षण किया गया हो, फिर भी ऐसी चीजें होती हैं और खेल को ज्ञात और कार्यशील स्थिति में रीसेट करने का एक तरीका होना चाहिए।
सुल्तान

9
कम काम हासिल करना एक महत्वपूर्ण लक्ष्य है, न कि शर्म का विषय। आप रिवाइंड सिस्टम बनाने में एक हफ्ता बिता सकते हैं और एक महीने में सभी बग्स को खत्म कर सकते हैं, या फिर से लोड कर सकते हैं और अन्य फीचर्स पा सकते हैं =)
पैट्रिक ह्यूजेस

1
मुझे लगता है कि लागत यहाँ सबसे महत्वपूर्ण तर्क है। जब तक एक स्तर को फिर से लोड करना बहुत कुछ नहीं होता है और उपयोगकर्ता के लिए एक बड़ी झुंझलाहट बन जाती है, फिर से लोड करने के लिए अनुकूलित कोड लिखने के लिए कोई प्रोत्साहन नहीं होता है। सामान्य लोड के लिए कोड का पुन: उपयोग करने के लिए बस कम खर्च होता है।
orlp

1
+1 मैं बस यह स्पष्ट करना चाहता हूं कि एक स्तर को फिर से लोड करना और एक स्तर को लोड करना - अगर रीलोड सब कुछ बाहर फेंक देता है और एक नए लोड के साथ शुरू होता है - खेल खेलने के लक्ष्य को पूरा करने के लिए कोई नया कोड लिखने की आवश्यकता नहीं है। एक रिवाइंड सिस्टम कोड का एक नया सेट है जो गैर-तुच्छ है, और क्योंकि यह एक चर राज्य पर निर्भर है, इसलिए इसे डीबग करना बेहद मुश्किल है। उदाहरण: "बग फिक्स: 200 पिक्सल पानी के भीतर एक मिसाइल में विस्फोट के बाद एक बम के ऊपर एक हेलमेट को छोड़ने के बाद एक स्तर को पुनरारंभ करना अब डेस्कटॉप के लिए एक दुर्घटना का कारण नहीं बनता है।" संक्षेप में, आपको परेशान करने के लिए वास्तव में अच्छा कारण होना चाहिए।
ब्रायनएच

14

कंसोल के बारे में आपके प्रश्न के विरुद्ध मौजूदा उत्तरों को स्पष्ट करने के लिए: उनके पास शुरुआती जटिल और बड़े जटिल खेलों के लिए वर्तमान स्थिति दोनों को संग्रहीत करने के लिए पर्याप्त मेमोरी नहीं है।

एक गेम स्तर और प्रारंभिक स्थिति को अलग-अलग संग्रहीत कर सकता है ताकि बस राज्य को अंदर से चिल्लाया जा सके, और यह बहुत संभव है कि कई गेम क्या करें। यहां तक ​​कि सिर्फ स्ट्रीमिंग, जो कि स्मृति में रखी गई थी, की तुलना में काफी धीमी होने वाली है।

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

आदर्श रूप से, खिलाड़ी मरने और फिर से खेलने की तुलना में खेल खेलने में अधिक समय व्यतीत करता है, इसलिए खेल के दौरान बेहतर अनुभव के लिए अनुकूलन अधिक मायने रखता है।

अगली पीढ़ी के कंसोल और उनकी 8GB मेमोरी के साथ चीजें काफी बदल सकती हैं। या वे केवल उच्च-रिज़ॉल्यूशन मॉडल और सामग्रियों और बड़ी संख्या में सक्रिय इन-गेम ऑब्जेक्ट्स के साथ ही रह सकते हैं। समय बताएगा। यह देखते हुए कि पीसी गेम आम तौर पर 2GB RAM और 512MB VRAM (हालांकि कई बड़े मूल्यों के पैमाने) के साथ मशीनों को लक्षित करते हैं, नए कंसोल के 8GB बहुत ही शानदार होते हैं, जहां तक ​​न्यूनतम आधारभूत जाना होता है। हम जल्द ही आने वाले वर्षों में 1-2GB VRAM के साथ 64-बिट CPU / OS और 4-8GB RAM की मांग करने वाले गेम में बदलाव देखेंगे। तेज स्नैपशॉट के लिए कई राज्यों को मेमोरी में स्टोर करना बहुत आसान होना चाहिए।


+1 शानदार जानकारी और इस बात के लिए एक बढ़िया विवरण कि क्यों कंसोल को पुनः लोड करने में स्पष्ट रूप से धीमा है।
टॉम 'ब्लू' पिडॉक

7

मैं ब्लू के बहुत से जवाब से असहमत हूं, मुझे विश्वास नहीं है कि स्तरों को रीसेट न करने के लिए एक तकनीकी मामला है - मैंने निश्चित रूप से कभी भी सामना नहीं किया। स्तर लोडिंग लगभग हमेशा रीसेट करने की तुलना में धीमी होती है, वास्तव में मुझे किसी अवसर की कल्पना करना मुश्किल होता है जब यह नहीं होगा। अधिकांश मामलों में खेल प्रभावी ढंग से त्वरित स्तर लोडिंग की पेशकश कर सकते हैं यदि देवों ने चुना है।

असली जवाब है, जैसा कि सुझाव दिया गया है, यह आसान और तेज है। स्तरों को बार-बार लोड करना एक ऐसी चीज है, जिसके लिए किसी खेल को वैसे भी करने की आवश्यकता होती है, इसलिए इसे एक स्तर के पुनरारंभ में पुन: व्यवस्थित करना अपेक्षाकृत आगे की ओर है। रीसेट करने के लिए नए बग और मेमोरी लीक की बहुत अधिक संभावना वाले जटिल नए रास्ते की आवश्यकता होती है और इसके लिए डेवलपर समय के सभ्य निवेश की आवश्यकता होती है। कुछ मामलों में यह मेमोरी लिमिट को भी पुश कर सकता है। चूंकि डेवलपर समय के सर्फ के साथ खेल शायद ही कभी विकसित होते हैं, इसलिए स्तर रीसेटिंग जैसी वस्तुओं को रास्ते से हटाने के लिए एक अफसोसजनक प्रवृत्ति होती है, खासकर अगर खेल वास्तुकला पहले स्थान पर सबसे अच्छा नहीं है।

जब मुझे लगता है कि कोई भी ऐसी स्थिति के साथ आ सकता है जहां "रिवाइंडिंग" को रीसेट करने के लिए आवश्यक था, वास्तव में अधिकांश खेलों को केवल मूल स्थिति को संग्रहीत करने की आवश्यकता होती है, बनाए रखने के लिए पूरी तरह से उस स्थिति में रीसेट करने के लिए एक प्रभावी साधन प्रदान करता है और ऑब्जेक्ट्स को फ्लैग करने का साधन रीसेट पर छोड़ दें। खेल की राज्य की जानकारी भी संग्रहीत और आरामदायक होने की आवश्यकता है। इस तरह की जानकारी आम तौर पर एक पूरे स्तर की आवश्यकताओं की तुलना में स्मृति पर अपेक्षाकृत हल्की होती है, इसलिए ऐसा करने से डिस्क से डेटा की धीमी, महंगी लोडिंग (बनावट और मॉडल जैसी बड़ी वस्तुओं सहित) की आवश्यकता को हटा दिया जाता है और इसे तेजी से स्थानांतरित कर दिया जाता है, -मौके के पास से गुजरना।


3
आप एक तकनीकी मामले के उदाहरण के लिए शॉन के उत्तर की जांच करना चाहते हैं, जहां आप "रीसेट" पर एक स्तर फिर से लोड करना चाह सकते हैं
स्पार्टनडोनट

2

बड़े स्तर या सहज स्तर के खेल खेलने के लिए अनुमति देने के लिए, यहां तक ​​कि सीमित मेमोरी (मेमोरी हमेशा बहुत छोटा होने के बावजूद, सवाल यह है कि अगर आप रैम को पहले सीमा पर मारते हैं, या ग्राफिक्स कार्ड पर) एक और रणनीति है:

केवल स्मृति में स्तर का हिस्सा है, कि खिलाड़ी को वर्तमान में या कुछ सेकंड में आवश्यकता होगी। मॉडल, बनावट, ध्वनि के नमूने, ... जो शायद अब ज़रूरत नहीं हैं स्मृति से हटा दिए जाते हैं।

कालकोठरी घेराबंदी दिमाग में आती है (डेवलपर्स ने एक बार दावा किया था, कि स्मृति प्रबंधन ने वास्तविक गेम प्ले की तुलना में अधिक प्रसंस्करण शक्ति ली), अधिकांश MMORPGS इसे करते हैं, एक खुले वातावरण वाले निशानेबाजों को यह करना पड़ता है, ... इन मामलों में, इन मामलों की शुरुआत स्तर (या यहां तक ​​कि 30 सेकंड पहले एक प्रतिक्रिया बिंदु) अब स्मृति में (पूरी तरह से) नहीं हो सकता है।

अक्सर एक ताजा रीलोड सबसे आसान तरीका है, सबसे सस्ता तरीका है, और शायद सबसे तेज़ तरीका है।

संपादित करें: यहां डंगऑन घेराबंदी के लोडिंग तंत्र के बारे में एक पेपर है: द कंटीन्यूअस वर्ल्ड ऑफ डंगऑन सीज


अच्छी बात है, मैंने निरंतर या निर्बाध स्तरों के बारे में नहीं सोचा। इसके लिए पूरी तरह से अलग स्तर की लोडिंग प्रणाली की आवश्यकता होगी।
टॉम 'ब्लू' पिडॉक

2

शॉन और ब्लू के भौतिक प्लेटफ़ॉर्म सीमाओं और प्रो-कॉन निर्णयों के बारे में उत्कृष्ट उत्तरों के साथ, मैं एक टिप्पणी को एक अलग दृष्टिकोण में विस्तारित करने जा रहा हूं:

क्यों आप शायद बस पूरी तरह से स्तर पुनः लोड करना चाहिए

तो आप अपने loadLevel () कॉल को पूरी तरह से काम कर रहे हैं, हाँ! आप एक स्तर फ़ाइल जानकारी में स्ट्रीम करते हैं, और इसके आधार पर दुनिया के निर्माण के माध्यम से कदम रखते हैं, ऑब्जेक्ट बनाते हैं और जाते समय बनावट और ध्वनियों को लोड करते हैं। फिर, जब यह सब किया जाता है - या नाटक शुरू करने के लिए "पर्याप्त" किया जाता है, तो आप startPlay () कहते हैं और आपकी दुनिया का पता चलता है और आपका संगीत बजना शुरू हो जाता है।

अब जब आप स्तर के साथ किए जाते हैं, या मेनू से बच जाते हैं, या गेम से बाहर निकलते हैं, तो आप उन सभी संसाधनों और मेमोरी को खाली करने के लिए अनलोड () कहते हैं, जो आप एक चिकनी अनुभव की अनुमति देने के लिए पकड़े हुए हैं।

अब, क्या होता है जब आप "रिस्टार्ट स्तर" सुविधा जोड़ना चाहते हैं? कुंआ...

unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();

और आप कर रहे हैं! कोई नया कोड नहीं, बस कुछ सरल फ़ंक्शन अधिकतम पर कॉल करते हैं, और आपने पहले से ही लिखा है और सभी को डीबग किया है ताकि अब आपका नया चमकदार रिस्टार्ट फ़ीचर आपकी सूची से पार हो जाए, और शायद फिर कभी सामना न किया जाए - cruftless, गैर-जंगी कोड सबसे अच्छा प्रकार है! कोड को पुनः आरंभ करें चिरस्थायी लिवेल () फ़ंक्शन में ले जाएं और आप उस कोड को दूर कर सकते हैं और इसे फिर कभी नहीं देख सकते हैं - शायद यह सुनिश्चित करने के बाद कि पुनरारंभ करने के लिए एक स्तर है, ज़ाहिर है :)

लेकिन तब आपको आश्चर्य होता है कि अगर यह बेकार नहीं है, तो आप जिन चीजों को फिर से लोड कर रहे हैं, उन्हें फिर से लोड करना है। ठीक है, यदि आपके स्तर और संसाधन छोटे हैं, तो आपको सबसे अधिक लाभ उठाना होगा, हर बार लोड के कुछ सेकंड के लिए "रिस्टार्ट" को धीमी प्रणालियों (और शायद पुराने स्मार्टफोन) पर भी कहा जाता है, तो कौन परवाह करता है? "समयपूर्व अनुकूलन", आपको अपने समय के साथ करने के लिए बेहतर चीजें मिली हैं।

आह, लेकिन अब आपके स्तर बढ़ रहे हैं और आपके बनावट अधिक विस्तृत होते जा रहे हैं और साउंडट्रैक 512kbps में हर आवाज और संगीतमय परत के लिए अलग-अलग चैनलों के साथ फट गया (यह उस समय एक अच्छा विचार जैसा लग रहा था, हालांकि आपको याद नहीं है कि क्यों। ..) और "स्टेट-ओरिजिनल डिपेंडेंट वोकेल रे ट्रेसिंग मल्टीडायमेंशनल फूरियर ट्रांसफॉर्म मैट्रिसेस" के बारे में कुछ ऐसा जो आपको लगता है कि अभी पूरी तरह से बना है और असली चीज नहीं है, और लेवल लोडिंग वास्तव में थोड़ी देर लगती है और इसकी शुरुआत आपको परेशान करती है। आपने वास्तविक लोगों के साथ भी परीक्षण किया है और वे वास्तव में इसी तरह के खेल से भी बदतर समय के लिए एक अरुचि दिखाते हैं (आप एक MMORPG राजधानी की उम्मीद नहीं कर रहे हैं 100 खिलाड़ियों के साथ <2 सेकंड में पूरी तरह से लोड करने के लिए? और यह एक समस्या है।

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

पहले असली समस्या को ठीक करो!

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

सबसे पहले, आपको यह महसूस करना होगा कि यह तुच्छ नहीं है। आपको पूरी तरह से नया, अनुपयोगी कोड लिखना होगा, और यह "स्टेट-डिपेंडेंट" है, ताकि आपको पता भी न चले कि क्या स्तर के नाटकों के बीच पुन: उपयोग होने जा रहा है या नहीं। क्या आपके स्तर में यादृच्छिक तत्व, स्पॉन, चर बनावट (आपके कंकाल केवल कभी-कभी कवच ​​पहनते हैं?), या अन्य बदलते तत्व हैं? क्या ऐसी चीजें हैं जो खिलाड़ी के साथ बदलती हैं, जैसे एक संगठन या अनुकूलित मॉडल या रंग / दरवाजे / जाल?

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

कोई फर्क नहीं पड़ता कि आप क्या करते हैं, भले ही आपका गेम सरल हो, आप अस्पष्ट बग्स में जाने वाले हैं जो स्तर / खिलाड़ी स्थिति पर आधारित होते हैं जब एक स्तर को फिर से शुरू किया गया था जो आपके साथ पहली बार स्तर को लोड करने के लिए नहीं होता है। इसलिए आपको टेक्स्ट के साथ गेम अपडेट लिखना होगा:

"एक टाइल पर एक बम पर एक हेलमेट को गिराना जिसके पास एक मिसाइल विस्फोट हुआ था जो कि 200 पिक्सेल पानी के भीतर भी था, अब आपके गेम डेटा को दूषित नहीं करेगा या खेल को क्रैश करने का कारण बनेगा।"

असली कारण अधिकांश खेल परेशान नहीं करते

क्या आपने कभी गौर किया है कि ज्यादातर लोग बस आधार परत से नीचे उतरने के बजाय अपनी मौजूदा दीवारों पर पेंट या ड्राईवॉल करते हैं, या ऊपर खींचने के बजाय दृढ़ लकड़ी के फर्श के ठीक ऊपर कालीन बिछाते हैं?

साधारण तथ्य यह है कि यह कम से कम इनाम के लिए अधिक काम है। अपनी मौजूदा दीवारों पर चित्रकारी करना ज्यादातर समय ठीक रहता है , और दृढ़ लकड़ी के फर्श को उखाड़ने का मूल्य अक्सर न्यूनतम या कोई नहीं होता है।

सॉफ्टवेयर में भी यही बात है, गेम्स से लेकर मल्टीमीडिया पॉवर पॉइंट प्रेजेंटेशन तक - अगर आप सब कुछ करते हैं तो एक लोडिंग स्क्रीन से कुछ सेकंड की दूरी पर लोग अपना 1% समय व्यतीत करते हुए देखते हैं, तो बेहतर होगा कि आप ऐसा करने के लिए अविश्वसनीय रूप से तुच्छ हो या आपके निवेशित समय पर बहुत खराब रिटर्न।

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


0

क्योंकि यह विपरीत व्यवहार को विकसित करना कठिन है जो स्मृति में स्थिर गेम डेटा (जैसे बनावट, भूविज्ञान जानकारी, अप्रभावित मॉब) को रखने और केवल डायनेमिक डेटा (जैसे खिलाड़ी की स्थिति, खिलाड़ी आँकड़े, खोज स्थिति, इन्वेंट्री) को फिर से लोड करने के बारे में है ।

चूंकि यह अधिक पैसा और समय खर्च करता है, खेल डेवलपर्स आमतौर पर ऐसा नहीं करते हैं।


यह उन स्थितियों को कवर नहीं करता है जहां खेल की शैली या व्यक्तिगत मांगों के कारण विपरीत होना चाहिए। जैसे कि फारस के राजकुमार को एक विशेष गेम मैकेनिक और लड़ने वाले खेल उदाहरणों का उपयोग करने के लिए गेम स्टेट को रिकॉर्ड करने की आवश्यकता होती है, जो कि मैंने एक आइटम शुरू करने के लिए एक मैच के माध्यम से आधे रास्ते के लिए रीसेट करने के लिए व्यक्तिगत आइटम / स्तर / चरित्र राज्यों को फिर से लोड करने में सक्षम होने की आवश्यकता है। अगले राउंड या अगले गेम को शुरू करने के लिए मैच को पुनः आरंभ करें। हाथ में खेल की मांगों को पूरा करने के लिए इनकी आवश्यकता होती है और इसलिए खेल डेवलपर्स के लिए अधिक समय और पैसा खर्च करना आवश्यक है।
टॉम 'ब्लू' पिडॉक

यदि किसी विशिष्ट गेम में विपरीत होता है, तो ऊपर दिया गया प्रश्न उस गेम के लिए अमान्य है। क्योंकि खेल में लोडिंग का समय तेजी से होगा जो इसके विपरीत होता है। मैंने सिर्फ उस स्थिति के लिए प्रश्न का उत्तर दिया जो यह लागू होता है (जो कि खरोंच से पूरे स्तर को लोड करने वाला खेल है)
Xtro

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

इसलिए, आपकी प्रतिक्रिया मेरे उत्तर की पहली पंक्ति के लिए है जो "विवरणों की कोई आवश्यकता नहीं" के बारे में सही है? अगर मैं उस लाइन को हटा दूं, तो क्या आप -1 पॉइंट वापस लेंगे?
Xtro

पूरी तरह से पर्याप्त - हाँ। कभी भी विस्तार को हतोत्साहित न करें जहां इसे देना संभव है और आप आमतौर पर पाएंगे कि आपके उत्तर बहुत अधिक प्रशंसा प्राप्त कर रहे हैं।
टॉम 'ब्लू' पिडॉक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.