C / C ++ में क्रॉस-प्लेटफ़ॉर्म गेम बनाते समय क्या आपके पास कोई सुझाव / सिफारिशें हैं?
C / C ++ में क्रॉस-प्लेटफ़ॉर्म गेम बनाते समय क्या आपके पास कोई सुझाव / सिफारिशें हैं?
जवाबों:
अमूर्त परतों के पीछे कुछ भी प्लेटफॉर्म-विशिष्ट छिपाएं
इसका अर्थ है सामान प्रदान करना, ऑडियो, उपयोगकर्ता इनपुट और फ़ाइल 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 के रूप में लेखक करें, फिर एक पाइपलाइन है जो स्वचालित रूप से उन विभिन्न प्लेटफ़ॉर्म-विशिष्ट स्वरूपों में परिवर्तित कर सकता है जिनकी आपको ज़रूरत है।
अपने डेटा में विशिष्ट मेमोरी लेआउट या एंडियननेस न मानें
प्लेटफ़ॉर्म बाइट क्रम, पैडिंग, संरेखण और शब्द आकार में भिन्न हो सकते हैं। कोई भी कोड जो उस बारे में परवाह करता है, उसे सभी प्लेटफार्मों पर अच्छी तरह से जांचना आवश्यक है।
हर समय, सभी प्लेटफार्मों पर परीक्षण करें
आपको प्लेटफ़ॉर्म-विशिष्ट बग द्वारा काट लिया जाएगा । जब आप खेल को दरवाजे से बाहर निकालने की कोशिश कर रहे हों, तो क्या आप अभी काटेंगे या ठीक करेंगे?
एक opengl / sdl जैसी एपीआई का उपयोग करें जो प्लेटफ़ॉर्म से प्लेटफ़ॉर्म पर जाने पर आपको न्यूनतम परेशानी देगा।
सुनिश्चित करें कि आप जानते हैं कि आप किन प्लेटफार्मों का समर्थन करना चाहते हैं। केवल इसलिए ओपेंगल का उपयोग न करें क्योंकि आपको लगता है कि आप भविष्य में मल्टी प्लेटफॉर्म का समर्थन करना चाहते हैं। जैसा कि आप जाने का मतलब शुरू करो।
जानिए कि जिन प्लेटफार्मों पर आप समर्थन करना चाहते हैं उनमें से प्रत्येक पर हार्डवेयर सीमाएँ क्या हैं।
#if defined(_FOO_) ... #elif defined(_BAR_) ... #else ... #endif
सभी कोड में बिखरने से बचने की कोशिश करें ।
कभी-कभी ऐसा लगता है कि यह आसान तरीका है, लेकिन यह आपको लंबे समय में परेशानी देगा। आपको उन्हें अपनी फ़ाइल तक सीमित रखने का प्रयास करना चाहिए, ताकि प्रत्येक प्लेटफ़ॉर्म कार्यान्वयन स्वयं निहित हो।
एक प्लेटफॉर्म जोड़ना ज्यादातर नई कार्यान्वयन फ़ाइलों को जोड़ने के बारे में होना चाहिए, और बस कुछ आवश्यक मौजूदा को संशोधित करना चाहिए।
बहुत सारे पुस्तकालय हैं जो स्वयं क्रॉस-प्लेटफॉर्म हैं; कहीं भी चलने के लिए आपको सीधे OpenGL में लिखने की आवश्यकता नहीं है। OGRE एक रेंडरिंग इंजन का एक बेहतरीन उदाहरण है जो आपके द्वारा नामांकित किसी भी प्लेटफ़ॉर्म पर काम करता है।
मेरे अनुभव में, सबसे बड़ी चिंता आपकी निर्माण प्रणाली है। यदि आप विजुअल स्टूडियो के साथ विंडोज पर विकसित होते हैं, तो आपका कोड लिनक्स में संकलित हो सकता है, लेकिन आपके पास इसे बनाने में कठिन समय होगा । सीएमके जैसी बिल्ड सिस्टम को देखें जो प्लेटफ़ॉर्म-विशिष्ट प्रोजेक्ट फ़ाइलों को बनाने के लिए समान बिल्ड निर्देशों का उपयोग कर सकती हैं (विंडोज़ पर लिनक्स, वीएस प्रोजेक्ट्स, मैक पर एक्सकोड प्रोजेक्ट्स आदि)।
फ़ाइलों को सहेजने और लोड करने या नेटवर्क पर संचार करने के लिए अपने कार्यों को लिखते समय, धीरज के बारे में मत भूलना ।
Fread / Fwrite या उस जैसे कुछ निम्न स्तर की एक कॉल के साथ एक बड़ी संरचना को पढ़ने के बजाय, ReadByte / WriteByte और ReadFloat / WriteFloat बनाएं। तब आपके पास बदलाव करने के लिए कम स्थान होंगे यदि आप बाद में एक अलग मंच को लक्षित करने का निर्णय लेते हैं।
#ifdef PLATFORM_WIN
FTW