मैं कुछ मुद्दों को कुशलता से निर्धारित करने के साथ रहा हूँ अगर बड़े कमरे एक voxel- आधारित 3 डी कमरे में सील कर रहे हैं। मैं एक ऐसे बिंदु पर हूं, जहां मैंने बिना किसी से मदद मांगे अपनी समस्या को हल करने की पूरी कोशिश की है, लेकिन हार मानने की कोशिश नहीं की, इसलिए मैं मदद मांग रहा हूं।
स्पष्ट करने के लिए, सील किया जा रहा है कि कमरे में कोई छेद नहीं हैं। ऑक्सीजन सीलर्स हैं, जो यह जांचते हैं कि कमरा सील है या नहीं, और ऑक्सीजन इनपुट स्तर के आधार पर सील करें।
अभी, यह है कि मैं यह कैसे कर रहा हूँ:
- सीलर टाइल के ऊपर ब्लॉक पर शुरू (वेंट सीलर के शीर्ष चेहरे पर है), पुनरावर्ती पाश सभी 6 आसन्न दिशाओं के माध्यम से
- यदि आसन्न टाइल एक पूर्ण, गैर-वैक्यूम टाइल है, तो लूप के माध्यम से जारी रखें
- यदि आसन्न टाइल पूर्ण नहीं है, या एक वैक्यूम टाइल है, तो जांचें कि क्या यह आसन्न ब्लॉक है, पुनरावर्ती।
- हर बार एक टाइल की जाँच की जाती है, एक काउंटर को घटाया जाता है
- यदि गणना शून्य से टकराती है, यदि अंतिम ब्लॉक एक वैक्यूम टाइल से सटे हुए है, तो वापस लौटें कि क्षेत्र अनसाल्टेड है
- यदि गिनती शून्य से टकराती है और अंतिम ब्लॉक एक वैक्यूम टाइल नहीं है, या काउंटर शून्य होने से पहले पुनरावर्ती लूप समाप्त हो जाता है (कोई वैक्यूम टाइल नहीं बची है)
यदि क्षेत्र सील नहीं है, तो कुछ परिवर्तनों के साथ लूप को फिर से चलाएं:
- एक निर्वात टाइल के बजाय "सांस लेने वाली हवा" टाइल के लिए आसन्न ब्लॉकों की जाँच करना
- एक decrementing काउंटर का उपयोग करने के बजाय, तब तक जारी रखें जब तक कोई आसन्न "सांस लेने वाली हवा" टाइल नहीं मिलती।
- एक बार लूप समाप्त होने के बाद, प्रत्येक चेक किए गए ब्लॉक को एक वैक्यूम टाइल पर सेट करें।
यहाँ मैं कोड का उपयोग कर रहा हूँ: http://pastebin.com/NimyKncC
समस्या:
मैं हर 3 सेकंड में यह जांच कर रहा हूं, कभी-कभी एक सीलर को सैकड़ों ब्लॉकों के माध्यम से लूप करना होगा, और कई ऑक्सीजन मुहरों के साथ एक बड़ी दुनिया, इन कुछ पुनरावर्ती लूपों को सीपीयू पर बहुत मुश्किल हो सकता है।
मैं सोच रहा था कि क्या अनुकूलन के साथ अधिक अनुभव वाला कोई भी मुझे हाथ दे सकता है, या कम से कम मुझे सही दिशा में इंगित कर सकता है। बहुत बहुत धन्यवाद।