गैर प्रोग्रामर के लिए XNA खेल की तैनाती की सुविधा


12

मैं वर्तमान में एक बेस के रूप में XNA से आरपीजी स्टार्टर किट का उपयोग करके आरपीजी पर काम कर रहा हूं। (http://xbox.create.msdn.com/en-US/education/catalog/sample/roleplaying_game) मैं एक छोटी टीम (दो डिज़ाइनर और एक संगीत / ध्वनि कलाकार) के साथ काम कर रहा हूँ, लेकिन मैं अकेला हूँ प्रोग्रामर। वर्तमान में, हम निम्नलिखित (निरंतर) सिस्टम के साथ काम कर रहे हैं: टीम गेम में जोड़ने के लिए नई पिक्स / साउंड बनाती है, या वे मौजूदा ध्वनियों / पिक्स को संशोधित करती है, फिर वे एक रिपॉजिटरी में अपना काम करते हैं, जहां हम एक करंट बिल्ड रखते हैं सब कुछ के। (कोड, चित्र, ध्वनि, आदि) हर दिन या तो, मैं एक नया इंस्टॉलर बनाता हूं, नई छवियों, कोड परिवर्तन और ध्वनि को दर्शाता है, और हर कोई इसे स्थापित करता है।

मेरा मुद्दा यह है: मैं एक ऐसी प्रणाली बनाना चाहता हूं, जहां बाकी टीम उदाहरण के लिए, मुकाबला करने की आवाज़ की जगह ले सकती है, और वे तुरंत बदलावों को देख सकते हैं, बिना मुझे इंतजार किए। जिस तरह से XNA का सेटअप, अगर मैं प्रकाशित करता हूं, तो यह सभी छवि और ध्वनि फ़ाइलों को एन्कोड करता है, इसलिए टीम "हॉट स्वैप" नहीं कर सकती है। मैं हर किसी की मशीन पर Microsoft VS सेट कर सकता हूं और उन्हें दिखा सकता हूं कि कैसे जल्दी से प्रकाशित किया जाए, लेकिन मैं यह जानना चाहता था कि क्या ऐसा करने का एक सरल तरीका था।

क्या XNA का उपयोग करने वाली टीमों के साथ काम करने पर कोई इसके खिलाफ आया है?


2
XNA द्वारा सभी छवियों और ध्वनि फ़ाइलों को एन्कोडिंग करके, क्या आपका मतलब है कि वे XNA सामग्री पाइपलाइन द्वारा निर्मित हैं और .xnb फाइलों में बदल गए हैं?
डेविड गाविया

मुझे सटीक विस्तार याद नहीं है, लेकिन वे मानक पाइपलाइन के माध्यम से जाते हैं, हाँ।
साल

जवाबों:


12

सबसे पहले, मुझे नहीं लगता कि आपको हर बार प्रकाशन और एक इंस्टॉलर बनाने की आवश्यकता है। बस प्रोजेक्ट का निर्माण करें और रिपॉजिटरी में आउटपुट फाइल (यानी EXE और कंटेंट फोल्डर के अलावा कोई भी DLL निर्भरता जो आप उपयोग कर रहे हैं) रख सकते हैं, और यह उनके कंप्यूटर पर भी चलना चाहिए, जब तक कि उनके पास XNA Redist इंस्टॉल न हो जाए।

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

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

  • यदि आप विंडोज के लिए विकसित कर रहे हैं, तो आप अपना कोड बदल सकते हैं ताकि यह कंटेंट पाइपलाइन के माध्यम से जाने के बिना, अपने मूल प्रारूपों में रनटाइम पर परिसंपत्तियों को लोड करे। छवियों को लोड करने के लिए आप Texture2D.FromStream( इस उदाहरण की तरह ) का उपयोग कर सकते हैं और ऑडियो के लिए सबसे अच्छा समाधान जो मैंने पाया है वह इसके बजाय एफएमओडी एपीआई का उपयोग करना था ( उदाहरण के लिए )। फिर वे सीधे संपत्ति स्वैप कर सकते हैं और खेल को चला सकते हैं।

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


1
तुरंत जवाब के लिए धन्यवाद। मैं आपके दूसरे समाधान को पसंद कर रहा हूं, और मेरा एक सवाल है कि इससे उत्पन्न हुआ है: क्या वीएस में एक तरीका है # स्टाइल डेबग के समान एक ध्वज बनाने के लिए, जो मुझे कुछ ऐसा करने की अनुमति देगा, #IF NON_PRODUCTION_MODE, इस तरह से मैं इस गैर उत्पादन कॉल में से सभी FromStream () कॉल लपेट सकता हूं। अंत में, जब मैं गेम को उत्पादन में भेजने के लिए तैयार हूं, तो मैं आसानी से मोड स्विच कर पाऊंगा, और फिर से साउंड फाइल्स को एनकोड कर सकूंगा।
सैल

1
@ सल हां आप ऐसा कर सकते हैं। यहां प्रलेखन की जाँच करें
डेविड गाविया

1
@Sal डिफ़ॉल्ट रूप से, Visual Studio दो बिल्ड प्रोफ़ाइल बनाता है: डीबग और रिलीज़। आप दोनों के बीच से स्वैप कर सकते हैं Build->Configuration Manager। डिफ़ॉल्ट रूप से, डीबग बिल्ड में DEBUGसंकलन प्रतीक परिभाषित होता है, जिसका अर्थ है कि आप अपने गैर-रिलीज़ कोड के साथ लपेट सकते हैं #if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif
साइपर

1
@ साल इसके अलावा, मैंने पाया कि रिपॉजिटरी में बिन / * निर्देशिकाओं को शामिल करना बहुत आसान था, और डिजाइनरों / कलाकारों / क्यूए को सिर्फ बिन फ़ोल्डर की जांच करना है ताकि वे नवीनतम और महानतम चला सकें। ऐसा करने से, उन्हें सभी निर्भरताएं, बनावट, ऑडियो आदि सभी एक साथ मिल जाते हैं। फिर हर दिन उन्हें svn updateअपनी वर्किंग डायरेक्टरी पर काम करना था और वे रफ्तार पकड़ रहे थे।
साइपर

4

पार्टी में थोड़ी देर हो गई, लेकिन यहां मेरा विचार है।

मैं तीसरी स्थिति के साथ जाना चाहता हूं जिसमें पहले से मौजूद कोड-बेस को संशोधित करने जैसा कुछ भी नहीं है। यह काम करेगा यदि, आप बायनेरिज़ (वास्तविक गेम .exe और संकलित से .dlls) को आउटपुट निर्देशिका में कहीं भी प्रतिबद्ध करेंगे - उदाहरण के लिए पोस्ट-बिल्ड स्क्रिप्ट के साथ। बाद में, मैं मानूंगा कि हम विज़ुअल स्टूडियो 2010 और XNA गेम स्टूडियो 4.0 के बारे में बात कर रहे हैं (प्रक्रिया अन्य संस्करणों के लिए बहुत समान है, बस कुछ नंबरों को बदलने की आवश्यकता है)

तो, यह विचार है: अपनी परियोजना के मूल में एक स्क्रिप्ट (.cmd) बनाएं, जहां .sln समाधान रहता है, जिसमें निम्न चरण हैं:

  1. "दृश्य स्टूडियो 2010 कमांड प्रॉम्प्ट":

    कॉल "C: \ Program Files (x86) \ Microsoft दृश्य स्टूडियो 10.0 \ VC \ vcvarsall.bat" x86

    यह हमारी स्क्रिप्ट के लिए XNA पुस्तकालयों, और सभी आवश्यक उपकरणों और बायनेरिज़ को खोजने में सक्षम होने के लिए है।

  2. सामग्री परियोजना (.contentproj) पर MSBuild कार्य को कॉल करें:

    msbuild / संपत्ति: XNAContentPipelineTargetPlatform = Windows / संपत्ति: XNAContentPipelineTargetProfile = पहुंच mygame.content / projectfile.contentproj

    आप निर्दिष्ट विभिन्न प्लेटफार्मों / प्रोफाइल द्वारा गुणों को संशोधित कर सकते हैं। आप एक समय में अधिक प्लेटफार्मों के लिए सामग्री बनाने के लिए आगे भी जा सकते हैं (विंडोज फोन, एक्सबॉक्स 360 या विंडोज)। प्रोफ़ाइल हो सकती है: पहुंच या HiDef (http://msdn.microsoft.com/en-us/library/ff604995.aspx)

  3. पुनरावर्ती फ़ोल्डर में आउटपुट की प्रतिलिपि बनाएँ जहाँ बायनेरिज़ + वास्तविक गेम भंडार पर संग्रहीत किया जाता है:

    xcopy / d / y / i / e bin \ x86 \ Debug \ Content * .. \ game_output \ Content

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

  4. कॉल करें pauseइसलिए स्क्रिप्ट उपयोगकर्ता इनपुट की प्रतीक्षा करेगी। यह जाँचने के लिए उपयोगी है कि क्या बिल्ड ठीक था और कोई त्रुटि सामने नहीं आई थी।

अब, कलाकार (या कोई भी) जो सामग्री फ़ाइलों को संशोधित करता है, उसे केवल .cmd स्क्रिप्ट पर डबल क्लिक करने की आवश्यकता होती है और नई सामग्री का निर्माण और उत्पादन निर्देशिका में कॉपी किया जाएगा जहां कमिट की गई कलाकृतियां हैं, परीक्षण के लिए तैयार हैं।

हालाँकि, एक छोटी सी समस्या है, जिसके लिए आपको डेविड की पोस्ट के 1 बिंदु पर कमबैक करना होगा: यदि कलाकार फ़ाइलों के साथ जोड़ / हटाकर / हटाकर कंटेंट प्रोजेक्ट को संशोधित करना चाहते हैं, तो उन्हें ऐसा करना होगा विज़ुअल स्टूडियो में प्रोजेक्ट (या प्रोजेक्ट फ़ाइल को हाथ से संपादित करना, जो मुझे संदेह है कि कोई भी करेगा)। जैसा मैंने कहा, यह एक छोटी सी समस्या है, क्योंकि वे रिपॉजिटरी में सिर्फ नई फाइल कर सकते हैं, और आप, कोडर कंटेंट प्रोजेक्ट में उन्हें शामिल करेंगे जब कोड उन को संभालने के लिए किया जाता है।

इस विचार पर, Shawn Hargreaveas ने msbuild और कमांड लाइन से सामग्री परियोजनाओं के निर्माण के बारे में कुछ पोस्ट किया: http://blogs.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time .aspx उनका समाधान एक नई फ़ाइल बनाना था, लेकिन मुझे लगता है कि यह पहले से मौजूद प्रोजेक्ट फ़ाइल का सीधे उपयोग करने के लिए आसान और अधिक रखरखाव योग्य है।

पुनश्च: लंबे पोस्ट xD के लिए क्षमा करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.