मैं वर्तमान में पार मंच अनुप्रयोगों पर काम कर रहा हूँ और करने के लिए कैसे अन्य लोगों को इस तरह के रूप समस्याओं से निपटने के रूप में बस उत्सुक था:क्रॉस-प्लेटफ़ॉर्म विकास से निपटने का आपका पसंदीदा तरीका क्या है?
- Endianess
- चल बिन्दु समर्थन (कुछ सिस्टम, सॉफ्टवेयर में अनुकरण बहुत धीमी गति से)
- आई/ओ सिस्टम (यानी डिस्प्ले, ध्वनि फ़ाइल का उपयोग, नेटवर्किंग, आदि)
- और निश्चित रूप से, संकलक मतभेद की अधिकता
जाहिर है यह है सी/सी ++ जैसी भाषाओं में लक्षित जो इस सामान में से अधिकांश को अमूर्त नहीं करते हैं (जावा या सी # के विपरीत, जो कई प्रणालियों पर समर्थित नहीं हैं)।
और यदि आप उत्सुक थे, तो जिन सिस्टमों पर मैं विकास कर रहा हूं वे निंटेंडो डीएस, वाईआई, पीएस 3, एक्सबॉक्स 360 और पीसी हैं।
संपादित
यहाँ पर वास्तव में अच्छा जवाब, कैसे मतभेद खुद, पुस्तकालय सुझाव (यहां तक कि बस में दे रही है और शराब का उपयोग करने का सुझाव) को संभालने के लिए से लेकर की एक बहुत कुछ किया गया है। मैं वास्तव में एक समाधान की तलाश नहीं कर रहा हूं (पहले से ही एक है), लेकिन यह सिर्फ उत्सुक था कि दूसरों को इस स्थिति से कैसे निपटना है क्योंकि यह देखना हमेशा अच्छा होता है कि दूसरों को कैसे लगता है/कोड ताकि आप विकसित हो सकें और बढ़ सकें।
यहां जिस तरह से मैंने समस्या का सामना किया है (और, यदि आपने ऊपर सिस्टम की इस सूची से अनुमान नहीं लगाया है, तो मैं कंसोल/विंडोज गेम विकसित कर रहा हूं)। कृपया ध्यान रखें कि जिन प्रणालियों पर मैं काम करता हूं उनमें आम तौर पर उनके लिए लिखे गए क्रॉस-प्लेटफार्म पुस्तकालय नहीं होते हैं (सोनी वास्तव में अनुशंसा करता है कि आप अपना खुद का प्रतिपादन इंजन स्क्रैच से लिखें और केवल उनके ओपनजीएल कार्यान्वयन का उपयोग करें, जो काफी नहीं है वैसे भी, एक संदर्भ के रूप में मानकों)।
Endianess
हमारे संपत्ति के सभी कस्टम प्रत्येक प्रणाली के लिए बनाया जा सकता है। हमारे सभी कच्चे डेटा (बनावट को छोड़कर) एक्सएमएल में संग्रहीत किया जाता है जिसे हम प्रोजेक्ट के निर्माण के दौरान सिस्टम विशिष्ट बाइनरी प्रारूप में परिवर्तित करते हैं। यह देखते हुए कि हम गेम कंसोल के लिए कैसे विकास कर रहे हैं, हमें विभिन्न एंडियन प्रारूपों के साथ प्लेटफ़ॉर्म के बीच स्थानांतरित होने के बारे में चिंता करने की आवश्यकता नहीं है (केवल पीसी उपयोगकर्ताओं को ऐसा करने की अनुमति देता है, इस प्रकार, यह अन्य प्रणालियों से भी इन्सुलेट किया जाता है) ।
चल बिन्दु समर्थन
सबसे आधुनिक प्रणालियों अंक मान ठीक चल रहा है, इसका अपवाद Nintendo DS है (और GBA, लेकिन काफी thats हमारे लिए इन दिनों एक मरे हुए मंच)। हम इसे 2 अलग-अलग वर्गों के माध्यम से संभालते हैं। पहला एक "निश्चित बिंदु" वर्ग (टेम्पलेटेड, निर्दिष्ट कर सकता है कि किस पूर्णांक प्रकार का उपयोग करना है और दशमलव मान के लिए कितने बिट्स) जो सभी अंकगणितीय ऑपरेटरों (बिट-शिफ्ट की देखभाल करना) लागू करता है और प्रकार रूपांतरणों को स्वचालित करता है। दूसरा एक "फ्लोटिंग पॉइंट" वर्ग है, जो मूल रूप से अधिकांश भाग के लिए फ्लोट के चारों ओर एक रैपर होता है, केवल अंतर यह है कि यह शिफ्ट ऑपरेटरों को भी लागू करता है। शिफ्ट ऑपरेटर को कार्यान्वित करके, हम डीएस पर तेजी से गुणा/डिवीजनों के लिए बिट शिफ्ट का उपयोग कर सकते हैं और फिर प्लेटफार्मों में सहजता से संक्रमण कर सकते हैं जो फ्लोट्स (एक्सबॉक्स 360 की तरह) के साथ बेहतर काम करते हैं।
आई/ओ सिस्टम
यह शायद हमारे लिए trickiest समस्या है क्योंकि हर प्रणाली नियंत्रक इनपुट, ग्राफिक्स (Xbox360, DirectX9 का एक संस्करण का उपयोग करता है PS3 ओपन है या आप अपने स्वयं लिख सकते हैं के लिए वहाँ खुद विधि है, स्क्रैच से और डीएस और वाईआई के पास अपनी खुद की मालिकाना प्रणाली है), ध्वनि और नेटवर्किंग (वास्तव में केवल डीएस प्रोटोकॉल में बहुत अलग है, लेकिन फिर उनमें से प्रत्येक का अपना सर्वर सिस्टम है जिसका उपयोग आप करना चाहते हैं)।
जिस तरह से हम इसे समाप्त कर रहे थे, वह बस प्रत्येक सिस्टम के लिए काफी उच्च स्तर के रैपर लिख रहा था (उदाहरण के लिए ग्राफिक्स के लिए मेष, नियंत्रकों के लिए कुंजी मैपिंग सिस्टम इत्यादि) और सभी सिस्टम एक ही शीर्षलेख फ़ाइलों का उपयोग करते हैं पहुंच। यह सिर्फ प्रत्येक मंच के लिए विशिष्ट सीपीपी फाइलों को लिखने का मामला है (इस प्रकार "इंजन" बना रहा है)।
संकलक मतभेद
यह एक बात है कि बहुत आसानी से घेरने की कोशिश नहीं की जा सकती, जैसा कि हम compilers के साथ समस्याओं में चलाने है हम आम तौर पर एक स्थानीय विकि पर लॉग जानकारी (ताकि दूसरों के लिए बाहर देखने के लिए क्या देख सकते हैं और इसके साथ जाने के लिए कामकाज) और यदि संभव हो, तो एक मैक्रो लिखें जो हमारे लिए स्थिति को संभालेगा। हालांकि यह सबसे सुरुचिपूर्ण समाधान नहीं है, यह काम करता है और देखता है कि कैसे कुछ कंपाइलर्स कुछ स्थानों में आसानी से टूटा हुआ है, और अधिक सुरुचिपूर्ण समाधान कंपेलरों को तोड़ने के लिए होते हैं। (मैं चाहता हूं कि सभी कंपाइलर्स माइक्रोसॉफ्ट के "#pragma एक बार" कमांड को लागू करें, # ifdef के सब कुछ लपेटने से कहीं ज्यादा आसान)
बहु-मंच पुस्तकालयों का उपयोग करके मैं आपसे सहमत हूं इस समस्या से निपटने का एक बहुत अच्छा तरीका – thrantir