2013-03-12 18 views
7

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

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

मेरा एक्सएनए गेम Texture2D उदाहरणों पर विशेष रूप से एक लाइब्रेरी क्लास पर निर्भर करता है, विशेष रूप से Dictionary<string, Texture2D> ऑब्जेक्ट्स के साथ लाइब्रेरी क्लास।

मुझे लगता है कि मैं क्या करने में सक्षम होना चाहता हूं, गेम एप के भीतर से बैकिंग ऐप में उन शब्दकोशों तक सीधे पहुंच प्राप्त करना है। एक्सएनए गेम्स केवल 32-बिट प्लेटफॉर्म पर लक्षित किए जा सकते हैं, और मैं बैकिंग ऐप 64-बिट होना चाहता हूं, इसलिए यह संसाधन डेटा के 1 (.5) गीगाबाइट को पकड़ सकता है (यदि यह संभव है)।


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

+0

शायद आप बेहतर यूनिट परीक्षण तैयार कर सकते हैं जो बड़े संसाधनों को लोड नहीं करते हैं और उत्पादन संस्करण के लिए आवश्यक डेटा की बड़ी मात्रा के बजाय नकली डेटा का उपयोग करते हैं। http://stackoverflow.com/questions/14087/automated-testing-a-game#14136। http://stackoverflow.com/questions/32835/xna-unit-testing – Despertar

उत्तर

-1

यह सब नीचे आता है कि आप किस प्रकार के संसाधनों को रन-टाइम पर लोड करना चाहते हैं। यदि आप सिर्फ बनावट/ध्वनि संपत्तियों का परीक्षण करना चाहते हैं, तो इसे Texture2D.FromFile और SoundEffect.FromStream (पीसीएम तरंग फ़ाइल होना आवश्यक) विधियों के उपयोग से निपटाया जा सकता है। हालांकि, यदि आप गतिशील रूप से मॉडल लोड करना चाहते हैं, तो इसके लिए थोड़ा अतिरिक्त प्रयास की आवश्यकता है। इस sample का अनुकूलन आपको जो चाहिए उसे पूरा करने में सक्षम होना चाहिए।

+0

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

+0

ठीक है, अगर यह एक गति/अवरुद्ध मुद्दा है तो आप सभी सामग्री प्रबंधन को एक अलग थ्रेड (सेल म्यूटेक्स रैपर के साथ) में शामिल करने का प्रयास कर सकते हैं और जांच कर सकते हैं कि संपत्ति पूरी तरह से लोड हो गई है या नहीं। यह ब्लॉग पोस्ट XNA में थ्रेड-सुरक्षित सामग्री लोडिंग का एक बहुत अच्छा अवलोकन देता है: http://konaju.com/?p=27। हालांकि, XNA ग्राफिक्सडिवाइस के किसी भी उपयोग पर एक महत्वपूर्ण खंड लगाता है, इसलिए यदि आप एनीमेशन/एसेट लोडिंग का एक बड़ा सौदा करने की कोशिश कर रहे हैं तो यह आपकी परियोजना को धीमा कर सकता है। उस स्थिति में, यह beter काम कर सकता है: http://theinstructionlimit.com/a-shared-content-manager-for-xna। –

+0

यह 2688 अलग-अलग छवि फाइलें है, * * * पर्याप्त गति के लिए कुछ भी नहीं किया जा सकता है। जब तक कि वे किसी भी पल में पहले ही लोड और उपलब्ध नहीं हो जाते हैं। – user1306322

0

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

http://en.wikipedia.org/wiki/Unit_testing

+0

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

+0

आप क्या सामान बदल रहे हैं? – SACO

+0

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

2

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

विचार एक मास्टर एप्लिकेशन को लोड करना होगा जो कभी बंद नहीं होता है। फिर आपके पास एक अलग गेम.dll है जिसे आप अपने स्वयं के एप्लिकेशन डोमेन में लोड करते हैं। फिर आप अपने सभी संसाधनों को अपने मास्टर एप्लिकेशन में लोड करते हैं। इसलिए संसाधनों को पकड़ने के लिए आपको गेम के लिए "प्रॉक्सी" इंटरफ़ेस बनाना होगा, लेकिन यह करने योग्य होना चाहिए।

इस बारे में अच्छी बात यह है कि आप अपने game.dll को रोकते हैं, इसे पुन: संकलित करते हैं, असेंबली पुनः लोड करते हैं और इसे अभी भी लोड किए गए संसाधन देते हैं।

एक संभावित मार्ग।

+0

मेरे मन में जो कुछ था, लगता है, लेकिन मैं यह कैसे कर सकता हूं? – user1306322

+0

ठीक है आपको किसी अन्य प्रश्न पूछने/जवाब देने की आवश्यकता है: _Can आप proxies_ के माध्यम से XNA संसाधन क्रॉस डोमेन साझा करते हैं। यदि आप इस मार्ग पर जाना चाहते हैं तो आपको पहले यह पूछना होगा। मैं उस के साथ आपकी मदद नहीं कर सकता। –

+0

मुझे लगता है कि * एक्सएनए संसाधन * * नेट संसाधन * श्रेणी में पड़ता है, कम से कम मुझे नहीं लगता कि 'System.Drawing.Bitmap' की तुलना में 'Texture2D' उदाहरण साझा करने के साथ और कोई समस्या होनी चाहिए। – user1306322

0

क्यों डब्ल्यूसीएफ नामित पाइप का उपयोग नहीं करते?

सिर्फ named pip का उपयोग कर WCF server के रूप में अपने आवेदन कर सकते हैं और सेट (स्ट्रिंग spriteName, Texture2D बनावट)

कि बनावट बदल जाएगा प्रदान करते हैं ..

संबंधित मुद्दे