2012-03-10 15 views
5

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

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

उत्तर

4

बंद प्रत्येक खेल बारी निष्पादित करने के लिए की एक सूची के बाद वास्तव में एक अच्छा विचार की तरह लगता है :-)

serialising क्लोजर पूरी तरह से संभव है। ग्रूवी 1.8.5 के बाद से, यह आसान बना दिया गया है के रूप में दो तरीकों dehydrate और rehydrate क्लोजर में जोड़ा गया था (ताकि owner, thisObject और delegate क्रमबद्धता से पहले हटाया जा सकता है)

लेकिन मैं के लिए देशी जावा क्रमबद्धता के साथ समस्या है डेटा की बचत सिस्टम के बीच अल्पकालिक डेटा भेजने के लिए, यह बहुत अच्छा हो सकता है (लेकिन फिर भी मैं protocol buffers या thrift)

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

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

+0

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