IOS गेम्स के लिए ऑब्जेक्टिव-सी या सी ++?


18

मैं ऑब्जेक्टिव-सी और सी ++ में बहुत आश्वस्त प्रोग्रामिंग हूं, लेकिन मुझे ऑब्जेक्टिव-सी का उपयोग करना आसान है और प्रकृति में अधिक लचीला और गतिशील है।

IOS में गेम लिखने के लिए ओब्ज-सी के बजाय C ++ का उपयोग करने पर क्या होगा? या यों कहें कि क्या C ++ की तुलना में Obj-C का उपयोग करने में कोई समस्या है?

उदाहरण के लिए, मुझे संदेह है कि C / C ++ में लिखे कोड की तुलना में Obj-C के साथ प्रदर्शन के मुद्दे हो सकते हैं।


इसी तरह का सवाल SO
बोबोबोबो

जवाबों:


21

C ++ का एक बड़ा उल्टा: यदि आप ऐसा करने का निर्णय लेते हैं, तो Android / PC / DS / PSP / के लिए पोर्ट करना अपेक्षाकृत आसान होगा (यहाँ पर पसंद का प्लेटफ़ॉर्म डालें)। उद्देश्य-सी आपको पूरे खेल को फिर से लिखने का निर्णय लेने तक आपको iOS में लॉक कर देगा।


10
मैं "आसान" शब्द से असहमत हूं। "संभव" एक बेहतर विकल्प हो सकता है।
डीव्यू

1
हाँ, कई छोटे खेलों के लिए (उदाहरण के लिए, अधिकांश iPhone गेम) एक प्लेटफ़ॉर्म से दूसरे पर काम करने के लिए कोड को अनुकूलित करने के बजाय नए प्लेटफ़ॉर्म से स्क्रैच से सब कुछ फिर से लिखना बेहतर है। एक ठोस एमवीसी आर्किटेक्चर इस दर्द को कम करेगा, लेकिन मैच -3 गेम के लिए कौन परेशान करेगा?
jhocking

3
अपेक्षाकृत आसान! यदि विकल्प असंभव है, तो "अत्यंत कठिन" अपेक्षाकृत आसान है;)
ज़ोरबहुत

blog.vucica.net/2011/06/… वह Android के लिए उद्देश्य सी एप्लिकेशन बनाने के बारे में बात करता है। यह सिर्फ लिनक्स है और लिनक्स ओपजेक को आईफोन की तरह आसानी से चला सकता है।
फेलोउस कैट 16

उद्देश्य c का उपयोग करना आपको लॉक नहीं करेगा। XNU कर्नेल विल के लिए विशिष्ट कार्यों का उपयोग करना। Gclang वहाँ एक कारण के लिए है।

16

यहां कोई वास्तविक पेशेवरों या विपक्ष नहीं हैं, कम से कम कोई भी जो एक प्रोग्रामर को एक भाषा में सहजता से दूसरे का उपयोग करने के लिए मजबूर नहीं करना चाहिए।

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

पोर्टेबिलिटी है अगर आप इसके बारे में परवाह है, एक असली मुद्दा। यदि नहीं, तो meh। पार मंच होने के नाते सब अंत नहीं है। पहले एक पर सफल होना अच्छा होगा :) आप हमेशा बाद में पोर्ट कर सकते हैं। यदि आप ध्यान से दिन 1 से क्रॉस प्लेटफॉर्म बनने की योजना नहीं बना रहे हैं, तो बस उसी भाषा में होने से आपको बहुत दूर नहीं मिलेगा: प्लेटफार्मों के बीच बहुत अधिक वास्तविक अंतर हैं जिन्हें संबोधित करने की आवश्यकता है।

परियोजना को समाप्त करना अधिक महत्वपूर्ण है जो तकनीक के बारे में झल्लाहट करता है, और यदि आप ओज-सी में अधिक उत्पादक हैं तो ओज-सी में रहें।

मेरी प्राथिमिकता? मैं सी ++ लड़का हूं। मैं Obj सी की तरह ठीक है, लेकिन मैं C ++ खुश हूँ, और मैं ऐसा लिखने क्रॉस प्लेटफॉर्म कोड।


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

4

C ++ पर ओब्ज-सी के साथ कोई प्रदर्शन समस्याएँ नहीं हैं। दोनों संकलित कोड हैं, और याद रखें कि ओबज-सी सी का एक सुपरसेट है, और ओब्ज-सी ++ सी ++ का एक सुपरसेट है, जो महान है जब आप ओब्ज-सी और सी ++ को एक ही कार्यक्रम (आसान काम और एक्सकोड) में मिलाते हैं C ++ पक्ष के लिए अच्छा समर्थन है)। सभी भाषा संयोजन OpenGL का समर्थन करते हैं, इसलिए कोई भी गंभीर ग्राफिक्स का काम ठीक है और भाषा की परवाह किए बिना Apple के साथ पुस्तकालय का समर्थन ठीक है।

उसने कहा, आपके खेल का उद्देश्य क्या है?

  • यदि आप पूरी तरह से IOS के लिए लिख रहे हैं, तो चिंता न करें और जिस भी भाषा या संयोजन में आप अधिक सहज महसूस करते हैं, उसके लिए लिखें। मेरे लिए, यह STL के साथ Obj-C ++ होना चाहिए क्योंकि यह C ++ का मेरा पसंदीदा हिस्सा है। चूंकि मैं ओब्ज-सी को सी ++ से थोड़ा अधिक पसंद करता हूं, इसलिए मैं इस विकल्प का उपयोग करता हूं।

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

  • यदि आप शुद्ध हैं और सिर्फ एक भाषा चाहते हैं, तो ओब्ज-सी में लिखें।

अन्य लोगों ने अन्य पुस्तकालयों (भौतिकी और ऐसे) के बारे में बात की है। आप जिस भाषा के विकल्प के बारे में बात कर रहे हैं, उसमें से किसी को भी एक्सेस करने में कोई समस्या नहीं है (Obj-C, C ++, या Obj-C ++)। आपके पास किसी भी भाषा में उन पुस्तकालयों के साथ कोई प्रदर्शन समस्या नहीं होगी।

एक चेतावनी: संदेश पासिंग के साथ एक सूचक अप्रत्यक्ष कॉल है। मुझे यकीन नहीं है कि आप ओवरहेड के रूप में कितना व्याख्या कर सकते हैं, क्योंकि मुझे पूरा यकीन है कि विरासत में मिली सी ++ विधि कॉल के समान ही है। क्या कोई इसे स्पष्ट कर सकता है?

उम्मीद है की वो मदद करदे,

ली।


1
अच्छे अंक, लेकिन क्या आप वास्तव Vector3Dमें ओबज-सी में अपनी कक्षा लिखना चाहेंगे ? मेरी आंत की भावना मुझे बताती है कि खराब प्रदर्शन हो सकता है।
मार्टिन विकमैन

1
यह बस इतना ही था। Obj सी है सी नहीं एक प्रदर्शन मुद्दा। यदि आप XCode के साथ मानक हेडर फ़ाइलों में जाते हैं, तो आप पाएंगे कि अंतर्निहित प्रकार सिर्फ C संरचनाएं हैं।
ली

2
ओब्ज-सी वाला संदेश ओवरहेड सी ++ की तुलना में काफी अधिक है क्योंकि यह अधिक गतिशील है। यह निश्चित रूप से "बिल्कुल वैसा ही नहीं है"। उदाहरण: डेवलपर
एंडी डेंट

1

यह वास्तव में आप क्या प्रोग्रामिंग कर रहे हैं पर निर्भर करता है । यदि यह मुख्य रूप से मौजूदा भौतिकी और ग्राफिक्स इंजनों का उपयोग करके गेम लॉजिक है, तो मैं सुरक्षित रूप से कह सकता हूं कि यदि आप obj-c के साथ अधिक सहज हैं तो मुझे c या c ++ का उपयोग करने का कोई कारण नहीं दिखता है। यदि आप रेंडरिंग या फिजिक्स की कक्षाएं शुरू करने जा रहे हैं, तो मैं शायद सी या सी ++ का उपयोग करने वालों को लिखूंगा। Cocos2d - जो कि एक अद्भुत है और सबसे लोकप्रिय iOS गेम पुस्तकालयों में से एक obj-c में लिखा गया है।

इस पढ़े को देखें - संबंधित भाग "श्रम का विभाजन" है, जो आपको यह तय करने में मदद कर सकता है कि उच्च स्तर की भाषा में कब कोड करें और निम्न स्तर का उपयोग कब करें: खेलों में प्रबंधित कोड

हालांकि ऑब्जेक्टिव-सी ओवरहेड ऐसा नहीं होना चाहिए जहाँ C # के पास न हो और (iOS पर) भी प्रबंधित नहीं हो, मेरा मानना ​​है कि लॉजिक अभी भी लागू होता है, और iOS चलाने वाले डिवाइस भी नहीं हैं, जहाँ PC के रूप में पास उतना ही मजबूत होगा जो MSIL की व्याख्या करेगा :)


2
IOS पर Obj-C प्रबंधित कोड नहीं है। उदाहरण के लिए (और विशेष रूप से) ओबज-सी में ओएसएक्स के लिए प्रोग्रामिंग करते समय एक कचरा कलेक्टर होता है, लेकिन इसमें आईओएस पर कचरा कलेक्टर नहीं होता है।
झिंगिंग

@ हॉकिंग मैंने कभी नहीं कहा कि यह प्रबंधित किया गया था, क्या अभी भी ओवरहेड नहीं है जब ओ + सी के विपरीत ओज-सी का उपयोग किया जाता है? मैंने c # बनाम c ++ का उल्लेख किया था, यह वह जगह नहीं थी जहाँ obj-c vs ​​c ++ के पास था
ज़की जर्मन

जब आप ओब्ज-सी के बारे में बात करते हुए "गेम्स में प्रबंधित कोड" नामक एक लिंक पोस्ट करते हैं, तो मुझे लगता है कि आपको लगता है कि ओब्ज-सी प्रबंधित कोड है। जो कि OSX पर है, सिर्फ iOS पर नहीं। नासमझ की तरह, जैसे कि जावा ने कुछ प्लेटफार्मों पर मशीन कोड के लिए संकलित किया, लेकिन दूसरों पर जेवीएम में भाग गया।
झॉकिंग

ओह और मुझे नहीं पता कि ओबीजी-सी में सी ++ की तुलना में कोई ओवरहेड है या नहीं। इसलिए मैं खुद जवाब नहीं दे रहा हूं।
झॉकिंग

1
@ जॉकिंग नो सर :) "बात यह है कि, ऑब्जेक्टिव-सी में रिटेन / रिलीज मॉडल मोटे तौर पर बिना मेमोरी मैनेजमेंट से बेसिक जीसी के एक बीच का मैदान है, इसलिए आप पहले से ही कर्व से आगे हैं।" interfacelab.com/objective-c-memory-management-for-lazy-people
ज़की जर्मन

1

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

मेरा मानना ​​है कि लब्बोलुआब यह है: ऑब्जेक्टिव-सी का उपयोग करें जहां आपको आईफोन के कार्यों के साथ बातचीत करनी चाहिए (आखिरकार, हर जगह ट्रैंपोलिन डालना किसी के लिए भी अच्छा नहीं हो सकता है ), लेकिन जब लूप की बात आती है, तो वेक्टर ऑब्जेक्ट क्लास जैसी चीजें, या गहन सरणी पहुंच, अच्छा प्रदर्शन प्राप्त करने के लिए C ++ STL या C सरणियों के साथ रहें।

मेरा मतलब है कि यह देखना पूरी तरह से मूर्खतापूर्ण होगा position = [[Vector3 alloc] init] ;। यदि आप किसी स्थिति सदिश की तरह बुनियादी वस्तुओं पर संदर्भ संख्या का उपयोग करते हैं तो आप केवल एक प्रदर्शन हिट के लिए पूछ रहे हैं।

इन तुलनाओं को भी देखें,

comparisons


Downvoter? कृपया समझाएँ।
बोबोबो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.