2009-06-17 13 views
6

वाल्व जैसी कंपनियां सभी तीन प्रमुख गेमिंग प्लेटफॉर्म पर गेम रिलीज़ करने में कैसे काम करती हैं? मुझे विशेष रूप से विंडोज, एक्सबॉक्स 360 और पीएस 3 के बीच कोड साझाकरण के संबंध में सर्वोत्तम प्रथाओं में दिलचस्पी है, क्योंकि आदर्श समाधान प्रत्येक प्लेटफार्म के लिए पूरी चीज को फिर से लिखने के बजाय जितना संभव हो उतना कोड पुन: उपयोग करना है।मैं क्रॉस प्लेटफ़ॉर्म गेम विकास के बारे में कैसे जान सकता हूं?

उत्तर

6

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

ध्यान दें कि सेल का थ्रेडिंग मॉडल असामान्य है कि "सामान्य रूप से" थ्रेडिंग करने से कुछ देखभाल होती है। मैं वाल्व कर्मचारी नहीं हूं और मुझे उनके रहस्यों में से कोई भी पता नहीं है, लेकिन यह मेरी समझ है कि अधिकांश गेम डेवलपर्स जो पीएस 3 को लक्षित करना चाहते हैं, वे नौकरी कतार का उपयोग करते हैं कि व्यक्तिगत सेल प्रोसेसर आवश्यकतानुसार कार्यों को बंद कर देते हैं। यह सेल का उपयोग करने का सबसे अच्छा तरीका नहीं है, लेकिन यह अधिक पारंपरिक थ्रेडिंग मॉडल (जैसे, फ्रीक्स, पीसी और 360 दोनों का उपयोग करने के लिए) को अच्छी तरह से सामान्यीकृत करता है।

2

कुछ साल पहले ओपेरा सीईओ ने एक साक्षात्कार में कहा कि स्वतंत्र प्लेटफार्मों के विकास के लिए कुंजी किसी भी ओएस/प्लेटफार्म पुस्तकालयों से दूर जाना है। उन्होंने आगे कहा और कहा कि उन्होंने अपनी खुद की पुस्तकालय विकसित की है जो ओएस प्रदर्शन में सुधार करती है।

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

एक और मुद्दा यह है कि अलग-अलग कंसोल में विभिन्न हार्डवेयर होते हैं, इस प्रकार विभिन्न प्रोग्रामिंग तकनीकों की आवश्यकता होती है।

दो चरम सीमाएं हैं, एक स्रोत बनाएं जो सभी फिट बैठता है (उदाहरण के लिए जावा) लेकिन आप अक्षमता का जोखिम चलाते हैं या 40 संस्करण लिखते हैं; एक-एक मंच के लिए अनुकूलित

1

वापस जब मैं शैक्षिक कंप्यूटर गेम में एक दोस्त था (पहले लर्निंग कंपनी क्षेत्र निराश), वह सब कुछ करने के लिए पार मंच पुस्तकालयों बनाने का एक बड़ा प्रशंसक था।

अन्य ऐप्स की तुलना में गेम के लिए यह आसान है। यदि आपके पास मैक और विंडोज पर चलाने के लिए एक वर्ड प्रोसेसिंग ऐप है, उदाहरण के लिए, इसे मैक पर मैक ऐप और विंडोज़ पर विंडोज ऐप की तरह दिखने और व्यवहार करने की ज़रूरत है। एक खेल लिखें, और इसे देशी व्यवहार, दिखने और महसूस करने के अनुरूप नहीं है।

4

इस विषय पर गेम डेवलपर पत्रिका लेख और जीडीसी वार्ता का एक गुच्छा है। वास्तव में, चूंकि आपने वाल्व का उल्लेख किया है, they delivered a talk describing their approach जीडीसी 08 पर।

यह वास्तव में एक बहुत बड़ा विषय है कि मैं (और है) घंटे पर घंटे के लिए के बारे में बात कर सकता है, लेकिन लिफ्ट सार है:

  • तय करें कि कौन इंजन के कुछ हिस्सों को पूरी तरह से मंच-विशिष्ट होते हैं और उनके पीछे डाल एक अमूर्त फ़ाइल और संपत्ति लोडिंग, उदाहरण के लिए, प्रत्येक कंसोल के लिए फिर से लिखना होगा; लेकिन आप इसे IFileSystem इंटरफ़ेस के पीछे छुपा सकते हैं जो एक समान एपीआई प्रदान करता है जो गेम कोड से बात करता है।
  • पीएस 3 यह कठिन बनाता है क्योंकि इसके अवशोषण बिंदु को अन्य प्लेटफॉर्म से पूरी तरह से अलग होना चाहिए। टकराव और नौसेना जैसी गेम फीचर्स को सेल के लिए अलग-अलग लिखा जाना होगा।
  • कोशिश पत्ती खेल कोड रखने के लिए (संस्थाओं, ऐ, सिम) मंच-नास्तिक संभव के रूप में ...
  • लेकिन स्वीकार करते हैं कि यहां तक ​​कि खेल कोड के leafiest कभी कभी पर्फ़ या स्मृति के लिए कुछ प्लेटफ़ॉर्म-विशिष्ट #ifdefs की आवश्यकता होगी या टीसीआर कारणों से। बहुत सारे UI को फिर से लिखना होगा क्योंकि निर्माताओं के पास विवादित प्रमाणन आवश्यकताएं हैं।
  • कोई भी जो "मैं प्रदर्शन के बारे में चिंतित नहीं हूं" या "स्मृति कोई मुद्दा नहीं है" शब्द कहता है, पेरोल पर नहीं होना चाहिए।
+2

"कोई भी जो शब्द" मैं प्रदर्शन के बारे में चिंतित नहीं हूं "या" स्मृति कोई मुद्दा नहीं है "पेरोल पर नहीं होना चाहिए।" दुखद लेकिन सत्य। अधिकांश प्रकार के सॉफ़्टवेयर के लिए यदि ये परिप्रेक्ष्य उन्हें सही कोड लिखने में मदद करता है तो ये लोग बड़ी सहायता कर सकते हैं। खेल के विकास में वे जहर हैं: - / –

1

यदि आप ओपन सोर्स उदाहरण चाहते हैं, तो आप क्वैक 1, 2 और 3 इंजन के स्रोत कोड को देख सकते हैं। वे काफी पोर्टेबल हैं। (बेशक, कोई PS3 या Xbox360 समर्थन, लेकिन एक ही सिद्धांत लागू होते हैं)

http://www.idsoftware.com/business/techdownloads/

3

यह सवाल दो अलग-अलग प्रश्नों में विभाजित किया जा सकता है। "मैं पोर्टेबल कोड कैसे लिख सकता हूं?" और "मुख्यधारा के गेमिंग प्लेटफॉर्म की अलग-अलग आवश्यकताएं क्या हैं?"।

पहला प्रश्न उत्तर देने के लिए अपेक्षाकृत आसान है। अपने गैर पोर्टेबल कोड सार संक्षेप के लिए सर्वोत्तम प्रक्रियाएं लिखें पोर्टेबल संहिता में शामिल किया गया है: http://books.google.ca/books?id=4VOKcEAPPO0C&printsec=frontcover

व्यवहार में सिद्धांत टर्निंग, भूकंप 3 स्रोत कोड एक सी codebase के लिए अलग अलग क्षेत्रों में विभिन्न प्लेटफार्मों बाहर विभाजित करने की एक बहुत अच्छा काम करता है, http://www.idsoftware.com/business/techdownloads/ पर उपलब्ध है, हालांकि, यह प्रति प्लेटफार्म एक बार लागू किए गए अमूर्त इंटरफेस जैसे सी ++ पैटर्न प्रदर्शित नहीं करता है।

आपके प्रश्न का दूसरा भाग, "मुख्यधारा के गेमिंग प्लेटफॉर्म की अलग-अलग आवश्यकताएं क्या हैं?" मुश्किल है हालांकि, यह उल्लेखनीय है कि परिवर्तन के आपके सबसे बड़े क्षेत्र अभी भी आपके रेंडरर, आपके ऑडियो सबसिस्टम और आपके नेटवर्किंग हैं।

प्रत्येक कंसोल प्लेटफार्म में प्रमाणन आवश्यकताओं की एक श्रृंखला है, जो संबंधित कंसोल मालिकों के साथ एक समझौते के तहत उपलब्ध है। आवश्यकताओं को उपयोगकर्ता अनुभव में स्थिरता की आवश्यकता है और गेमप्ले या गुणात्मक, उच्च स्तरीय मुद्दों पर केंद्रित नहीं हैं। उदाहरण के लिए, आपके गेम को एक उचित रोचक एनिमेटिंग लोडिंग स्क्रीन प्रदर्शित करने की आवश्यकता हो सकती है, और ब्लैक स्क्रीन अस्वीकार्य हैं।

इस दस्तावेज़ पर जितनी जल्दी हो सके अपने हाथों को प्राप्त करना एक विशिष्ट कंसोल प्लेटफार्म के लिए सही विकल्प बनाने के लिए महत्वपूर्ण है।

अंत में, यदि आप कंसोल डेकिट पर अपना हाथ नहीं प्राप्त कर सकते हैं, तो मेरा सुझाव है कि आप अपने कोड को विंडोज से मैक पर पोर्ट करें। यदि आप सार्वभौमिक बाइनरी का समर्थन करते हैं तो मैक आपको एक ओएस पोर्ट प्राप्त करता है ताकि आप Windows के साथ-साथ प्रोसेसर पोर्ट से बंधे न हों। यह सुनिश्चित करता है कि आपका कोड एंडियन अज्ञेयवादी है।

यदि आप पीसी और मैक दोनों का समर्थन करते हैं, तो आप भविष्य में तीसरे प्लेटफार्म का समर्थन करने के लिए अच्छी तरह से तैनात होंगे, क्या आपको भविष्य में इसका उपयोग करना चाहिए।

परिशिष्ट आप ने लिखा है:

आदर्श समाधान के बजाय पूरी बात को फिर से लिखने हर मंच

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

3

एक साथ विकास करना बहुत अच्छा है। आपको सभी प्रकार की बग मिलती हैं जो आपको केवल एक मंच नहीं मिलती हैं।

मुझे याद है कि डॉस में प्रोग्रामर हर समय शून्य पॉइंटर्स थे क्योंकि कम स्मृति को लिखने से उन्हें तुरंत क्रैश नहीं किया गया था। जब आप अमीगा, अटारी एसटी, या मैकिंतोश को पोर्ट करते हैं, तो उछाल! मुझे एक डॉस प्रोग्रामर को बताना याद है कि उसके पास एक छायादार जहाज पर दो नल पॉइंटर्स थे। उसने कुछ सेकंड के लिए सोचा और grinned, "यह कुछ चीजें बताता है।"

अब गेम के इतने बड़े बजट हैं, इसलिए उन्हें एक ही समय में शिप करना महत्वपूर्ण है ताकि आप मार्केटिंग और विज्ञापन बजट बर्बाद न करें।

एक साथ विकास पर मेरी सलाह एक लीड प्लेटफॉर्म चुनना है, लेकिन कभी भी दूसरे प्लेटफॉर्म को एक सप्ताह से अधिक समय तक नहीं जाने देना चाहिए। यह स्पष्ट हो जाएगा क्योंकि आप प्रोग्राम के सभी हिस्सों में कोड के कुछ हिस्सों के समान हैं और जो अलग हैं। मतभेदों को एक या अधिक प्लेटफ़ॉर्म-विशिष्ट क्षेत्रों में खींचें।

मेरा अनुभव सी/सी ++ में है। यदि आपको अलग-अलग भाषाओं (कहें, जावा और ऑब्जेक्टिव-सी) के खिलाफ पोर्ट करना है तो यह एक बड़ी समस्या है।

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