पूर्व खेल लोडिंग समय बनाम खेल लोडिंग समय बनाम


9

मैं एक गेम विकसित कर रहा हूं जिसमें एक यादृच्छिक भूलभुलैया शामिल है।
कुछ ऐ जीव हैं, चक्रव्यूह को दुबक रहे हैं। और मैं चाहता हूं कि वे मेज़ के आकार के अनुसार किसी रास्ते पर जाएं।

अब इसे लागू करने के लिए मेरे लिए दो संभावनाएं हैं, पहला रास्ता (जिसका मैंने इस्तेमाल किया था) भूलभुलैया बनने के बाद कई वांछित गुप्त रास्तों की गणना करके।
दूसरा, एक पथ की गणना करके एक बार गणना करने की आवश्यकता होती है, जब कोई प्राणी उसे दुबकना शुरू करता है।

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

कोई भी सुझाव, टिप्पणी, राय, मदद की होगी।

संपादित करें:

अभी के लिए, pपूर्व-परिकलित पथों की संख्या हो, एक प्राणी को एक मौजूदा पथ के बजाय 1/pएक नया पथ (जिसका अर्थ पथ गणना) लेने की संभावना है ।
एक प्राणी तब तक अपनी गश्त शुरू नहीं करता है जब तक कि पथ पूरी तरह से गणना नहीं करता है, इसलिए उसे प्रक्रिया में मारे जाने के बारे में चिंता करने की कोई आवश्यकता नहीं है।


8
इस बिंदु पर, यह पूर्व-अनुकूलन होगा। जब तक कोई समस्या नहीं है, मैं इसे छोड़ दूँगा।
जॉन मैकडॉनल्ड्स

3
और @JohnMcDonald के साथ थोड़ा सा झंकार करने के लिए, यदि आप इन रास्तों की गणना मध्य-खेल और इसके ध्यान देने योग्य नहीं कर सकते हैं, तो लोड समय पर वे कितना योगदान कर सकते हैं?
जेम्स

जवाबों:


6

बरिककुक ने विचार को सही ढंग से व्यक्त किया है। यदि वे ठीक से काम करते हैं तो गणना को छोड़ दें।

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

लेकिन एक बात: यदि आपकी गणना मध्य खेल को चलाने के लिए लागू की जाती है तो आप हमेशा उन्हें लोड करने के दौरान प्रदर्शन करने के लिए मजबूर कर सकते हैं।

कई समाधान हैं:

  • स्तर निर्माण / लोडिंग के दौरान रास्तों की गणना / लोड करना
  • रास्तों की गणना के लिए एक दूसरे धागे का उपयोग करें
  • अपने एल्गोरिदम का अनुकूलन करें
  • यदि आपके पास थ्रेडिंग तक कोई पहुंच नहीं है, तो एक अवरोधी प्रणाली का उपयोग करें।

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

आपके मामले के आधार पर, रुकावट प्रणाली प्रारंभिक और आंशिक समाधान दे सकती है जिसका उपयोग गणना समाप्त होने से पहले घटना के लिए किया जा सकता है।


संपादित करें : उत्तर देने वाला @ कीपर

"बाधात्मक एल्गोरिथ्म" हमारे पास मौजूद बाधाओं के कारण ही उपयोगी था। मूल रूप से हमने मल्टीथ्रेडिंग की कमी को दूर किया।

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

  • इसकी वर्तमान संगणना की स्थिति को बचाएं
  • लूप के अंत में या एक लूप के दौरान (जब कोई बच्चा वस्तु बाधित होती है)
  • समय निकलने पर बाहर निकलें
  • फिर से शुरू करें जहां यह या तो सही सूचकांक पर एक लूप को फिर से शुरू करना बंद कर देता है या बच्चे के ऑब्जेक्ट को कॉल करता है जो वर्तमान में अपने बच्चों के शीर्ष पर है।
  • अगर सबकुछ बाधित हो जाता है तो सब कुछ साफ करें
  • सबसे अच्छा आंशिक परिणाम दे।

केवल सबसे महंगे संचालन को अलग-अलग वस्तुओं में तोड़ दिया गया और सही स्थानों को खोजने में कुछ समय लगा जहां हम गणना रोक सकते थे, लेकिन अंत में यह बहुत अच्छी तरह से काम करता है।

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

बेशक अब iPhone और iPad पर गेम को इसकी आवश्यकता नहीं है, दूसरे धागे का उपयोग करना आदर्श होगा। लेकिन मुझे संदेह है कि कोड अभी भी है।


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

@ कीपर मुझे आशा है कि मैंने आपके प्रश्न का उत्तर बाधित भाग के बारे में दिया। यह करने के लिए एक दर्द है और यह अधिकांश आधुनिक प्रणालियों पर प्रासंगिक नहीं है।
कोयोट

भले ही मैं अभी के लिए इस विधि का उपयोग नहीं करने जा रहा हूं, लेकिन आपने कुछ नया करने के लिए मेरी आँखें खोल दीं। आपका उत्तर स्वीकार करने योग्य है।
कीपर

8

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

प्रारंभिक प्रारंभिक लोडिंग समय क्षम्य हैं, लेकिन प्ले के दौरान यादृच्छिक एफपीएस उतार-चढ़ाव आम तौर पर नहीं होते हैं।


2

एक संभावना यदि आपको इसकी आवश्यकता है, तो गणना को एक दूसरे धागे पर ले जाना है क्योंकि इन दिनों लगभग हर पीसी में एक से अधिक सीपीयू कोर होते हैं।

मूल प्रक्रिया यह होगी:

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

आपको कुछ अतिरिक्त एज मामलों के लिए भी देखना होगा (उदाहरण के लिए अनुरोध के संसाधित होने से पहले यदि प्राणी मर जाता है तो क्या होगा)।


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