बरिककुक ने विचार को सही ढंग से व्यक्त किया है। यदि वे ठीक से काम करते हैं तो गणना को छोड़ दें।
यदि आप पहले गणना कर सकते हैं और आप सुनिश्चित हैं कि आपको उन्हें मध्य-खेल की आवश्यकता नहीं होगी, तो इसे पहले करें। लोडिंग के बाद इसे करें। यदि खेल के दौरान गणना ध्यान देने योग्य नहीं है तो आप इसे वहां कर सकते हैं। यदि कुछ बिंदु पर जटिलता विकसित होती है और गणना बहुत भारी हो जाती है तो अनुकूलन शुरू हो जाता है।
लेकिन एक बात: यदि आपकी गणना मध्य खेल को चलाने के लिए लागू की जाती है तो आप हमेशा उन्हें लोड करने के दौरान प्रदर्शन करने के लिए मजबूर कर सकते हैं।
कई समाधान हैं:
- स्तर निर्माण / लोडिंग के दौरान रास्तों की गणना / लोड करना
- रास्तों की गणना के लिए एक दूसरे धागे का उपयोग करें
- अपने एल्गोरिदम का अनुकूलन करें
- यदि आपके पास थ्रेडिंग तक कोई पहुंच नहीं है, तो एक अवरोधी प्रणाली का उपयोग करें।
मैंने एक बड़े बाजार के खेल में अंतिम विकल्प को देखा और इस्तेमाल किया है। बस यह सुनिश्चित करें कि आप गणना के लिए आवश्यक सभी डेटा को फिर से शुरू करने के लिए ठीक से सहेज लें, और गणना के दौरान शेष समय / संचालन के लिए नियमित रूप से जांच करें।
आपके मामले के आधार पर, रुकावट प्रणाली प्रारंभिक और आंशिक समाधान दे सकती है जिसका उपयोग गणना समाप्त होने से पहले घटना के लिए किया जा सकता है।
संपादित करें : उत्तर देने वाला @ कीपर
"बाधात्मक एल्गोरिथ्म" हमारे पास मौजूद बाधाओं के कारण ही उपयोगी था। मूल रूप से हमने मल्टीथ्रेडिंग की कमी को दूर किया।
एक बिंदु पर हमारे पास एक गेम था जहां एआई को कई शब्दकोशों के आधार पर बड़ी मात्रा में चाल की गणना करनी थी। इस गणना के दौरान सभी एनिमेशन बंद हो जाएंगे क्योंकि शब्दकोशों को अधिक डेटा के साथ विस्तारित किया गया था और डेटा पकड़े हुए डेटासेट को बदल दिया गया था और खेल के मल्टीप्लेयर के लिए अनुकूलित होने पर कम कुशल था (जहां एआई को खिलाड़ी की चाल के लिए भी बातचीत करनी थी)। हमारे पास गेम लूप के लिए केवल एक धागा उपलब्ध था (बहु-प्लेटफ़ॉर्म कोड सभी समर्थित प्लेटफ़ॉर्म पर चलना चाहिए)। इस बिंदु पर गणना एल्गोरिथ्म को तोड़ने का निर्णय लिया गया था ताकि हम इसे बाधित कर सकें। इसलिए हम सिर्फ उस पुनरावर्ती प्रणाली का उपयोग नहीं कर सकते थे जो चर के रूप में थी, जिसे बचाया नहीं जा सकता था। कार्यों को उन वस्तुओं से बदल दिया गया था जो बस माता-पिता और बच्चे की वस्तुओं के लिए सभी आवश्यक चर और संकेत रखती थीं। मैं डॉन'
- इसकी वर्तमान संगणना की स्थिति को बचाएं
- लूप के अंत में या एक लूप के दौरान (जब कोई बच्चा वस्तु बाधित होती है)
- समय निकलने पर बाहर निकलें
- फिर से शुरू करें जहां यह या तो सही सूचकांक पर एक लूप को फिर से शुरू करना बंद कर देता है या बच्चे के ऑब्जेक्ट को कॉल करता है जो वर्तमान में अपने बच्चों के शीर्ष पर है।
- अगर सबकुछ बाधित हो जाता है तो सब कुछ साफ करें
- सबसे अच्छा आंशिक परिणाम दे।
केवल सबसे महंगे संचालन को अलग-अलग वस्तुओं में तोड़ दिया गया और सही स्थानों को खोजने में कुछ समय लगा जहां हम गणना रोक सकते थे, लेकिन अंत में यह बहुत अच्छी तरह से काम करता है।
हमने प्रदर्शन खो दिया है, लेकिन उपयोगकर्ता के लिए कथित प्रदर्शन बहुत बेहतर था क्योंकि एनिमेशन सभी प्लेटफार्मों पर आसानी से चलते थे, सभी प्लेटफॉर्म तब बड़े शब्दकोशों का उपयोग बिना काट-छाँट एनिमेशन या फ्रीज़ से पीड़ित कर सकते थे। इसके अलावा इसने हमें समानांतर रूप से कई उदाहरण चलाने की अनुमति दी जब हमें बाद में इसकी आवश्यकता थी।
बेशक अब iPhone और iPad पर गेम को इसकी आवश्यकता नहीं है, दूसरे धागे का उपयोग करना आदर्श होगा। लेकिन मुझे संदेह है कि कोड अभी भी है।