क्रॉस-प्लेटफ़ॉर्म C ++ / OpenGL ES विकास (iOS / Android) [बंद]


10

मेरे पास पहले से ही C ++ और OpenGL के साथ उचित अनुभव है, और मैंने हाल ही में मोबाइल गेम के विकास का प्रयास करने का निर्णय लिया है। जावा का उपयोग करते हुए एक सरल ओपनजीएल ईएस एंड्रॉइड ऐप को सफलतापूर्वक बनाने के बाद, मैंने एंड्रॉइड और आईओएस दोनों को संभव के रूप में कम पुनर्लेखन कोड के साथ लक्षित करने के तरीकों पर शोध किया। मैंने विजुअल स्टूडियो 2015 के गर्व से घमंड पार प्लेटफॉर्म ऐप डेवलपमेंट टूल्स का उपयोग करने की कोशिश की, लेकिन उन्हें बहुत नया और इसलिए बेहद कम-दस्तावेज़ वाला पाया। मैं अपने द्वारा दिए गए टेम्प्लेट प्रोजेक्ट्स का निर्माण कर सकता था, लेकिन मैं यह पता नहीं लगा सका कि इन टेम्प्लेट्स को देखते हुए, मैं एसेट्स को गेम में शामिल कर सकता हूं या टच स्क्रीन इनपुट को संभाल सकता हूं।

मेरे पास दुर्भाग्य से विशिष्ट इच्छा है, Google के साथ खोजने के लिए बहुत विशिष्ट है। मैं Android और iOS के लिए पतले प्लेटफ़ॉर्म-विशिष्ट रैपर के साथ, C ++ का उपयोग करके एक OpenGL ES गेम बनाना चाहता हूं। लोगों ने मुझसे इसी तरह के सवाल पूछे हैं (हालांकि बिल्कुल समान नहीं), और जवाब देने वाले एक से अधिक लोगों ने कहा कि मैं जो करना चाहता हूं वह न केवल संभव है, बल्कि अपेक्षाकृत आसान है, क्योंकि मुझे यूआई के बारे में चिंता करने की ज़रूरत नहीं है।

मैंने इस ट्यूटोरियल की कोशिश की , लेकिन यह लगभग तीन साल पुराना है और इसलिए शायद पुरानी तकनीक के लिए डिज़ाइन किया गया है, और इसके परिणामस्वरूप मैं विभिन्न बेहिसाब कीड़े में भाग गया। हालाँकि, इस समय, उस ट्यूटोरियल को सबसे ज्यादा करीब से देखा जा सकता है। बाकी सब कुछ या तो केवल एंड्रॉइड है, या सिफारिश है कि मैं मुरब्बा एसडीके का उपयोग करने के लिए प्रति वर्ष सैकड़ों डॉलर का भुगतान करता हूं। कई बार मुझे ऐसा लगता है कि सिर्फ दो बार कोड लिखना, एक बार जावा में और एक बार ऑब्जेक्टिव-सी में, लेकिन मुझे इस ज्ञान से प्रेरित रखा गया है कि यह समाधान संभव है, लेकिन किसी कारण से, किसी भी आधुनिक विवरण में कहीं भी शामिल नहीं है।

संक्षेप में, मैं iOS और Android के लिए एक OpenGL ES गेम बनाना चाहता हूं, जिसमें एक ही C ++ कोडबेस को कम-से-कम प्लेटफ़ॉर्म-विशिष्ट कोड में लपेटा गया है। हालांकि, इस तथ्य के बावजूद कि कई लोगों ने इस दृष्टिकोण की सिफारिश की है, कोई भी मुझे नहीं बता सकता है कि यह कैसे करना है। क्या कोई मुझे बता सकता है कि क्या यह वास्तव में संभव है, और यदि हां, तो मैं क्या कर सकता हूं या मैं कैसे सीखने जा सकता हूं?


कोशिश Cocos2d-x , या unity3d
Ali1S232

1
unity3d दूर है जो ओपी पूछ रहा है क्योंकि आपके पास कोई स्रोत नहीं है। मैंने cocos2d-x का उपयोग किया है और संकलन के मुद्दे अभी भी कुछ हद तक हैं। उद्देश्य-सी प्रभाव के रूप में अच्छी तरह से महसूस किया जाता है, कुछ ऐसा हो सकता है, लेकिन मेरे लिए यह एक बंद है। हालांकि, यह एक खुला स्रोत समाधान है, इसलिए शायद ओपी समय की जांच के लायक है।
मैथ्यू सैंडर्स

जवाबों:


6

मददगार होने के लिए आपको यहां एक ऐसे ही सवाल का जवाब मिल सकता है।

आप अन्य समाधानों के स्रोत कोड को देखने के लिए भी उपयोगी हो सकते हैं। गोडोट इंजन उदाहरण के लिए एक पार मंच खुला स्रोत खेल इंजन ताकि आप भुगतान कुछ भी करने की जरूरत नहीं है।

जैसा कि मैंने अपने अन्य उत्तर में उल्लेख किया है कि आपको (और संभावना नहीं है) आपके लिए काम करने के लिए एक आईडीई पर भरोसा नहीं कर सकता है। CMake , Scons और कई अन्य बिल्ड टूल प्लेटफॉर्म और IDE के पार संकलन / निर्माण प्रक्रिया के साथ मदद कर सकते हैं।

गोडोट इंजन , उदाहरण के लिए, का उपयोग करता है SCons और LLVM परियोजना (द्वारा इस्तेमाल किया संकलक ढांचे उर्फ बजना C / C ++ / ऑब्जेक्टिव-सी संकलक) का उपयोग करता है CMake

खेलों के लिए एक लोकप्रिय दृष्टिकोण सी / सी ++ में एक इंजन का निर्माण करना है और, जैसा कि आप उल्लेख करते हैं, प्लेटफॉर्म की बारीकियों का सार है। जब आईओएस और एंड्रॉइड की बात आती है तो यह जीवन चक्र प्रबंधन तर्क है जो ओएस के साथ इंटरफेस करता है। यदि आप अतिरिक्त मील जाना चाहते हैं और Emscripten का उपयोग करके asm.js को संकलित करना चाहते हैं और ब्राउज़र में मूल गति के निकट का एहसास करते हैं, तो आप मुख्य लूप के पीछे अमूर्तता के साथ ऐसा ही कुछ कर रहे हैं, जो मात्राओं का अनुरोध करता है।

Emscripten ने पोर्टिंग प्रक्रिया को आसान बनाने के लिए SDL के उपयोग की सिफारिश की क्योंकि यह प्लेटफॉर्म की बारीकियों को अमूर्त करने में मदद कर सकता है, लेकिन ऐसा करने से आपको खुद को रोकना नहीं है (अन्य तो शोध के भार, डिबगिंग आदि)।

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

मुद्दा यह है कि हाँ यह वास्तव में संभव है, लेकिन कुछ सड़कें अधिक जटिल हैं / समय लेने वाली हैं तो अन्य।

नोट: आपकोiOS के संकलन के लिए XCode के साथMac, VM , या Hackintosh के माध्यम से Mac OSX का उपयोग करने की आवश्यकता होगी। यह कई कारणों में से एक है जो मुझे लगता है कि मैकबुक प्रो एक विकास प्रणाली के लिए एक महान उम्मीदवार है।

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

नोट 3: यदि आपको यह पहले से नहीं मिला है। यदि आप SDL या कुछ अन्य समाधानों का उपयोग नहीं करते हैं जो कि मंच की बारीकियों को सार करता है, तो आपको प्रत्येक प्लेटफ़ॉर्म के विशिष्ट C / C ++ इंटरफ़ेसिंग विशेषताओं का उपयोग करने की आवश्यकता होगी। IOS के साथ यह XCode में बहुत सरल है क्योंकि कंपाइलर (ऊपर बताए अनुसार) C / C ++ को पहले से ही सपोर्ट करता है। Android के साथ आपकोजावा और C / C ++ के बीच NDK और मार्शल कॉलका उपयोग करने की आवश्यकता है।


1
मैंने गोडोट इंजन के स्रोत कोड को देखा। यह थोड़ा ज्यादा लगता है; मैं उन विशेषताओं के बिना अपना खुद का निर्माण करूँगा जिनकी मुझे आवश्यकता नहीं है। मुझे यकीन नहीं है कि यह कैसे करना है, हालांकि। मैं अभी तक Android पर किसी भी C ++ कोड को सफलतापूर्वक चलाने में सक्षम नहीं हूं।
क्रेग होरवुड

हे ... एनडीके पिकनिक नहीं है। ईमानदारी से मुझे डेवलपर मित्रता श्रेणी में कुछ मदद की आवश्यकता है। आपके लिए SDL ऑफ लिमिट का उपयोग कर रहा है? मेरे पास बहुत अधिक जानकारी है अगर जरूरत हो तो मैं उत्तर को अपडेट कर सकता हूं।
मैथ्यू सैंडर्स

एसडीएल ऑफ-लिमिट्स नहीं है, लेकिन मैं वहां जाना पसंद नहीं करूंगा। एक बार फिर, वहाँ हमेशा ज्ञान है कि यह एक ढांचे के बिना किया जा सकता था के कुछ भी नहीं है।
क्रेग हॉरवुड

मुझे लगातार उस कीड़े ने काट लिया है, इसलिए मुझे पता है कि आप कैसा महसूस करते हैं। मैंने पहले भी NDK का उपयोग किया है और मुझे नहीं लगता कि सेटअप और संकलन के तरीके में बहुत बदलाव आया है। मुझे यकीन है कि डिबगिंग में सुधार हुआ है क्योंकि आपको टर्मिनल के माध्यम से अतीत में सीधे जीडीबी का उपयोग करना था और आईडीई को इसके लिए कोई समर्थन नहीं था, लेकिन ऐसा लगता है कि उन्होंने एंड्रॉइड स्टूडियो में एनडीके समर्थन को जोड़ना शुरू कर दिया है । आपने हेलोजनी उदाहरण की कोशिश की है ?
मैथ्यू सैंडर्स

NDK अस्तित्व में सबसे घृणित चीजों में से एक है, आप bgfx को संदर्भ github.com/bkaradzic/bgfx के रूप में उपयोगी पा सकते हैं , यह उतना पतला नहीं है, जितना आप इसे पसंद कर सकते हैं, लेकिन इसमें कई प्रतिपादन बैकेंड भी हैं
JBeurer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.