क्रॉस-प्लेटफ़ॉर्म गेम बनाने के लिए कोई सुझाव? [बन्द है]


जवाबों:


44

अमूर्त परतों के पीछे कुछ भी प्लेटफॉर्म-विशिष्ट छिपाएं

इसका अर्थ है सामान प्रदान करना, ऑडियो, उपयोगकर्ता इनपुट और फ़ाइल IO। अमूर्त करने के लिए एक सामान्य चाल है कि एक रन-टाइम प्रदर्शन जुर्माना लगाने के बिना प्लेटफ़ॉर्म-विशिष्ट कार्यान्वयन फ़ाइलों के साथ प्लेटफ़ॉर्म-अज्ञेय हेडर है:

// FileSystem.h
class FileSystem {
public:
    FileHandle OpenFile(const char * path);
    // other stuff...
}

// FileSystemWindows.cpp
FileHandle FileSystem::OpenFile(const char * path) {
    // call windows API...
}

फिर उचित .cpp फ़ाइल के विरुद्ध बनाने के लिए प्रत्येक प्लेटफ़ॉर्म के लिए बिल्ड कॉन्फ़िगर करें।

प्रत्येक प्लेटफ़ॉर्म के लिए प्लेटफ़ॉर्म-स्वतंत्र संपत्ति और आउटपुट प्लेटफ़ॉर्म-विशिष्ट सामग्री में पढ़ी गई अपनी सामग्री पाइपलाइन बनाएं

उदाहरण के लिए, अपने टेक्सट को .tga या जस्ट .psd के रूप में लेखक करें, फिर एक पाइपलाइन है जो स्वचालित रूप से उन विभिन्न प्लेटफ़ॉर्म-विशिष्ट स्वरूपों में परिवर्तित कर सकता है जिनकी आपको ज़रूरत है।

अपने डेटा में विशिष्ट मेमोरी लेआउट या एंडियननेस न मानें

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

हर समय, सभी प्लेटफार्मों पर परीक्षण करें

आपको प्लेटफ़ॉर्म-विशिष्ट बग द्वारा काट लिया जाएगा । जब आप खेल को दरवाजे से बाहर निकालने की कोशिश कर रहे हों, तो क्या आप अभी काटेंगे या ठीक करेंगे?


2
की कमी #ifdef PLATFORM_WINFTW
tenpn

तुम कभी नहीं बचोगे आप इसे कम से कम करने की उम्मीद कर सकते हैं।
उदार

8
ऐसा करने का एक अच्छा तरीका यह है कि सभी प्लेटफ़ॉर्म विशिष्ट कोड को एक ही इंटरफ़ेस के साथ एक साझा साझा लाइब्रेरी में स्थानांतरित किया जाए, फिर आप प्लेटफ़ॉर्म के लिए सही लाइब्रेरी बूट करने के लिए # ifdef को सीमित कर सकते हैं।
नील

1
+1, शानदार टिप्पणी। याद रखें कि यहां तक ​​कि एसटीएल प्लेटफ़ॉर्म-निर्भर है (और हां, कुछ फ़ंक्शन अलग-अलग कंपाइलरों पर अलग-अलग काम करते हैं)।
साइमन

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

10
  • एक opengl / sdl जैसी एपीआई का उपयोग करें जो प्लेटफ़ॉर्म से प्लेटफ़ॉर्म पर जाने पर आपको न्यूनतम परेशानी देगा।

  • सुनिश्चित करें कि आप जानते हैं कि आप किन प्लेटफार्मों का समर्थन करना चाहते हैं। केवल इसलिए ओपेंगल का उपयोग न करें क्योंकि आपको लगता है कि आप भविष्य में मल्टी प्लेटफॉर्म का समर्थन करना चाहते हैं। जैसा कि आप जाने का मतलब शुरू करो।

  • जानिए कि जिन प्लेटफार्मों पर आप समर्थन करना चाहते हैं उनमें से प्रत्येक पर हार्डवेयर सीमाएँ क्या हैं।


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

7

#if defined(_FOO_) ... #elif defined(_BAR_) ... #else ... #endifसभी कोड में बिखरने से बचने की कोशिश करें ।

कभी-कभी ऐसा लगता है कि यह आसान तरीका है, लेकिन यह आपको लंबे समय में परेशानी देगा। आपको उन्हें अपनी फ़ाइल तक सीमित रखने का प्रयास करना चाहिए, ताकि प्रत्येक प्लेटफ़ॉर्म कार्यान्वयन स्वयं निहित हो।

एक प्लेटफॉर्म जोड़ना ज्यादातर नई कार्यान्वयन फ़ाइलों को जोड़ने के बारे में होना चाहिए, और बस कुछ आवश्यक मौजूदा को संशोधित करना चाहिए।


4

बहुत सारे पुस्तकालय हैं जो स्वयं क्रॉस-प्लेटफॉर्म हैं; कहीं भी चलने के लिए आपको सीधे OpenGL में लिखने की आवश्यकता नहीं है। OGRE एक रेंडरिंग इंजन का एक बेहतरीन उदाहरण है जो आपके द्वारा नामांकित किसी भी प्लेटफ़ॉर्म पर काम करता है।

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


4

फ़ाइलों को सहेजने और लोड करने या नेटवर्क पर संचार करने के लिए अपने कार्यों को लिखते समय, धीरज के बारे में मत भूलना ।

Fread / Fwrite या उस जैसे कुछ निम्न स्तर की एक कॉल के साथ एक बड़ी संरचना को पढ़ने के बजाय, ReadByte / WriteByte और ReadFloat / WriteFloat बनाएं। तब आपके पास बदलाव करने के लिए कम स्थान होंगे यदि आप बाद में एक अलग मंच को लक्षित करने का निर्णय लेते हैं।


+1 * 9000. मुझे लगता है कि यह वास्तव में केवल आधुनिक / प्रयुक्त आर्किटेक्चर (RISC) के संदर्भ में मोबाइल फोन पर लागू होगा; लेकिन अभी भी महत्वपूर्ण है।
जोनाथन डिकिंसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.