यदि मैं C ++ 2d गेम लिखना चाहता हूं तो मैं कहां से शुरू करूं? [बन्द है]


17

मैं एक सी # वेब डेवलपर हूं और मैं अपने कौशल का विस्तार करना चाहता हूं और इसे करते समय कुछ मजा करना चाहता हूं। मैं C ++ की कुछ मूल बातें जानता हूं और मुझे C ++ का उपयोग करके अपने लिए एक सरल 2d गेम / गेम इंजन लिखना पसंद होगा। अन्य पुस्तकालयों या एसडीके की मुझे क्या आवश्यकता है और मुझे आगे बढ़ने के लिए कुछ ट्यूटोरियल और सूचनात्मक संसाधन कहां मिलेंगे?

मैंने पहले ही C # के साथ XNA में देखा है। इसके लिए बहुत सारे संसाधन हैं लेकिन मैं नॉन Microsoft उत्पादों का उपयोग करूंगा। इसका मतलब बेहतर राउंडेड प्रोग्रामर बनने के दौरान थोड़ी मस्ती करना है।

कृपया ध्यान दें कि मैं शुरू करने के लिए सबसे अच्छी जगह नहीं माँग रहा हूँ । मैं सिर्फ एक जगह शुरू करने के लिए कह रहा हूं ।

किसी भी मदद के लिए धन्यवाद!

जवाबों:


27

C ++ गेम देव के लिए मानक प्रारंभ स्थान (मेरे अनुभव में) SDL है । आप XNA करते हैं, इस से आपको अपने हाथ थोड़े से गंदे करने होंगे।

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


1
मैं उन पर गौर करूंगा। XNA के साथ मेरी सबसे बड़ी समस्या यह है कि यह इतना सीधा था कि मुझे ऐसा महसूस नहीं हुआ कि मैं वास्तव में निचले स्तर के सामान को सीख रहा हूं जिसे मैं तलाशने में दिलचस्पी रखता हूं।
क्वालालंल

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

यदि आप SDL की तुलना में कुछ अधिक चुनौतीपूर्ण चाहते हैं, तो ClanLib का प्रयास करें । एक्सएनए की तरह यह हार्डवेयर त्वरण का समर्थन करता है, लेकिन लिनक्स पर भी काम करता है, और 2 डी अनन्य भी।
ChrisC

2
आप सीधे गले के लिए भी जा सकते हैं - ओपनजीएल मेरा व्यक्तिगत पसंदीदा है (आप इसे एसडीएल या एसएफएमएल के साथ लपेट सकते हैं)
ultifinitus

9

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


9

व्यक्तिगत रूप से, मैं निम्नलिखित कारणों से Allegro 5 को चुनूंगा :

  1. इसमें CMake- आधारित बिल्ड सिस्टम है। यह कई प्लेटफार्मों पर काम करने के लिए अधिकांश बिल्ड सिस्टम की तुलना में बहुत आसान बनाता है। यह एक मामूली सी बात लगती है, लेकिन यह समग्र रूप से बहुत महत्वपूर्ण है। यह लाइब्रेरी को बहुत सरल बनाता है।

  2. SFML अभी भी महत्वपूर्ण प्रवाह में है। 2.0 एक बहुत बड़ा बदलाव है। जबकि Allegro पहले ही संस्करण 5 के साथ एक महत्वपूर्ण परिवर्तन के माध्यम से हो चुका है, और अब यह सब स्थिरता के बारे में है।

  3. यह SFML से एक अलग तरीके से मॉड्यूलरिटी को कवर करता है। एसएफएमएल के साथ, आप विशिष्ट घटकों के लिए पूछते हैं, लेकिन आप उन सभी को प्राप्त करते हैं। यदि आप ग्राफिक्स घटक के लिए पूछते हैं, तो आप सभी ग्राफिक्स घटक प्राप्त करते हैं। Allegro 5 के साथ, आपको हमेशा ग्राफिक्स घटक मिलता है। लेकिन अगर आप Allegro के बिटमैप लोडरों का उपयोग नहीं करना चाहते हैं, तो आपको नहीं करना है; आप अपना खुद का उपयोग कर सकते हैं।

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

  5. वे थ्रेडिंग करने की कोशिश करने के लिए पर्याप्त स्मार्ट हैं । C ++ 11 / Boost.Threads के साथ या तो व्यापक रूप से उपलब्ध है या बस कोने के आसपास, एक और थ्रेड आवरण का उपयोग करना समस्याग्रस्त से अधिक हो सकता है: यह आपके कोड को ठीक से काम करने के लिए खतरनाक हो सकता है।


आप एसडीएल या एसएफएमएल पर एलेग्रो को प्राथमिकता / सुझाव क्यों देंगे?
क़ाज़ी इरफ़ान

@ यमदूत: अगर आप जिद करते हैं।
निकोल बोलस

आप अभी भी SDL का उल्लेख नहीं करते हैं ...
इंजीनियर

@NickWiggill: SDL में थ्रेड और प्लेटफ़ॉर्म-विशिष्ट बिल्ड सिस्टम हैं। मुझे कुछ विशेष के लिए इसे कॉल करने की आवश्यकता महसूस नहीं हुई।
निकोल बोलस

@ निकोल-बोलास में आपने एलेग्रो के विपक्ष का उल्लेख नहीं किया है। ट्यूटोरियल की तुलना में बहुत कम मात्रा की तरह।
क़ाज़ी इरफ़ान

4

मुझे लगता है कि शुरू करने के लिए एक शानदार जगह है LazyFoo । यह आपको मिल जाएगा और एसडीएल के साथ तेजी से चल रहा है जो मैंने देखा है। मैं आपको जल्दी से ओपनजीएल में शामिल होने की सलाह दूंगा (जैसे ही आप इसे पेट कर सकते हैं) क्योंकि आप हार्डवेयर प्रोग्रामिंग के साथ अपने प्रोग्रामिंग डॉलर के लिए बहुत अधिक धमाका करेंगे। यदि आप उस मार्ग पर जाते हैं, तो मैं इस गाइड की सलाह देता हूं ।


2

यदि आप c ++ का उपयोग कर रहे हैं तो मैं SFML की सिफारिश करूंगा । यह आपको स्क्रीन पर जल्दी से कुछ प्राप्त करेगा और अपने सी ++ गेम कोड के साथ इसका उपयोग करना सीधे आगे है।


2
  • एसएफएमएल - समूह में बच्चा, लेकिन मैंने जो पढ़ा है, उसका उपयोग करने के लिए संभवतः सबसे आसान है।
  • एसडीएल - बीच सड़क। बहुत परिपक्व लाइब्रेरी, समझदार, आम तौर पर संक्षिप्त होती है यदि समय-समय पर थोड़ा सा आर्कैन, और एक बहुत ही सामान्य विकल्प। डिस्प्ले फॉर्मेट सेट करना थोड़ा कमीना हो सकता है, मैंने उस मोर्चे पर मदद के लिए लेज़ीफू के ट्यूटोरियल का उपयोग किया है।
  • एलेग्रो - जेरिएट्रिक, अटारी एसटी दिनों से यह चारों ओर है। उस कारण से, 2 डी रेंडरिंग कोड का बहुत (जो मुझे लगता है कि केवल एलीग्रो 4 में है) बहुत कम तेज है क्योंकि लॉजिक बहुत कम ऐनक सिस्टम के लिए बनाया गया था। मुझे व्यक्तिगत रूप से यह बहुत सहज नहीं लगता, यहां तक ​​कि दस्तावेज पर विचार करना।

OpenGL को ध्यान में रखते हुए इन दिनों चीजों के 2D पक्ष को तेज करता है, यह महत्वपूर्ण नहीं है कि फास्ट सॉफ़्टवेयर रेंडरर्स तक पहुंच हो, जो कि Allegro और SDL (या पहले के संस्करणों में था)। हालाँकि जब मैं एक पुस्तकालय चुनता हूँ तो मैं प्रोजेक्ट की परिपक्वता, उपयोगकर्ता आधार और गति से अधिक डॉक्स पर ध्यान केंद्रित करता हूं (इसलिए जब तक गति उचित है), और मैं कहूंगा कि SDL और Allegro उन मोर्चों पर जीतेंगे। SDL भी Civ: Call to Power जैसे ट्रिपल AAA शीर्षक जारी करता रहा है।

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