मैं C ++ में अपना गेम इंजन बना रहा हूं और वर्तमान में यह तय कर रहा हूं कि मुझे किस यूजर इंटरफेस का उपयोग करना चाहिए।
क्या मुझे एक पुस्तकालय का उपयोग करना चाहिए? क्या मुझे अपना बनाना चाहिए?
मैं C ++ में अपना गेम इंजन बना रहा हूं और वर्तमान में यह तय कर रहा हूं कि मुझे किस यूजर इंटरफेस का उपयोग करना चाहिए।
क्या मुझे एक पुस्तकालय का उपयोग करना चाहिए? क्या मुझे अपना बनाना चाहिए?
जवाबों:
वास्तव में, Qt विगेट्स को OpenGL के साथ एकीकृत किया जा सकता है और OpenGL को Qt (QGLWidget) के साथ आसानी से एकीकृत किया जा सकता है। बेशक, प्लेटफ़ॉर्म नेटिव लुकिंग विजेट वह नहीं हो सकता है जो आप ढूंढ रहे हैं, लेकिन चिंता न करें, उन्हें कस्टमाइज़ करने के तरीके हैं, अपना खुद का बनाएं या कुछ और उपयोग करें जो आपकी आवश्यकताओं के अनुरूप बेहतर होगा, जैसे कि क्यूटी क्विक (जो आप के रूप में अच्छी तरह से एकीकृत करने में सक्षम होना चाहिए)।
यदि आप रुचि रखते हैं, तो इन लिंक को याद न करें: विजेट तीसरे आयाम में प्रवेश करते हैं: वुल्फेनक्यूटी और अपने विजेट्स को OpenGL के साथ तेज करें
मुझे नहीं लगता कि आपको अपना खुद का लिखना चाहिए, गेम इंजन बनाने का काम अपने आप में बहुत बड़ा है, अगर आपके आसपास अच्छे लाइसेंस वाले कई पुस्तकालय हैं, जिनका आप उपयोग कर सकते हैं, और अपनी पसंद को संशोधित कर सकते हैं।
एक गेम इंजन के लिए मैं एक तत्काल मोड GUI के लिए जाऊंगा। यहाँ अधिक जानकारी: http://www.mollyrocket.com/forums/viewtopic.php?t=134
मुख्य विचार घटक को आकर्षित करना और एक ही समय में बातचीत को नियंत्रित करना है:
if (button(id, position, size))
{
button_was_pressed();
}
एक के लिए, एकता एक समान अवधारणा का उपयोग करती है।
आप उनके डेमो में उपयोग किए गए NVIDIA द्वारा कार्यान्वयन पा सकते हैं: http://code.google.com/p/nvidia-widgets/
व्यक्तिगत रूप से, मैं CEGUI की सिफारिश करूंगा । यह खुला स्रोत है और बहुत अच्छा है। हालाँकि, आपको जो ध्यान में रखना है वह यह है कि यह बहुत, बहुत क्रियात्मक हो सकता है यदि आप हाथ से सब कुछ लिखते हैं।
लेकिन, प्लस साइड पर, इसमें ओपनजीएल और डायरेक्टएक्स दोनों के लिए रेंडरर्स हैं। मैं इसे सामान्य रूप से उपयोग किए जाने वाले टेम्पलेट के शीर्ष पर रखने में कामयाब रहा, जो एक VBO का उपयोग करके सीधे बनावट को लिखता है (यह एक तरह का हैकी है)।
विचाराधीन गेम एक नेटवर्किंग असाइनमेंट के लिए था। असाइनमेंट में एक लॉबी के साथ एक नेटवर्क गेम था। मुझे पता था कि लॉबी बनाने के लिए गर्दन में दर्द होने वाला था, इसलिए मैंने एक पुस्तकालय उठाया, जो मेरे लिए सबसे ज्यादा काम करता था।
अधिकांश GUI पुस्तकालयों के साथ समस्या (Qt शायद सबसे लोकप्रिय C ++ एक है जो केवल Windows नहीं है) यह है कि अधिकांश एक इंजन में अच्छी तरह से एकीकृत नहीं होगा। पारंपरिक रूप से एक GUI ऐप में, GUI लाइब्रेरी मुख्य लूप को नियंत्रित करती है और आप घटनाओं के लिए कॉलबैक को हुक करते हैं। एक गेम इंजन में आप आम तौर पर लूप को नियंत्रित करना चाहते हैं, इसलिए यह सबसे अच्छा हो सकता है। हो सकता है कि आप किसी ऐसी चीज की तलाश कर रहे हों जो सिर्फ ड्राइंग कंट्रोल और डायलॉग्स को हैंडल करेगी और जैसे 3 डी संदर्भ में आप इसे पास करते हैं? उन लोगों को ढूंढना बहुत कठिन हो सकता है: - /
मैं दृढ़ता से अपने खुद के लिखने पर विश्वास करता हूं, लेकिन फिर मैं बहुत सुनसान हूं। अभी तक एक और GUI लिब के साथ लड़ना सिर्फ एक चीज जो आप चाहते हैं कि मुझे नट्स चलाना है, इस तथ्य के साथ जोड़ा गया कि ज्यादातर गेम GUI काफी तुच्छ हैं, इसलिए आपको MDI और सुपर OO डिज़ाइन पर जाने की ज़रूरत नहीं है जहाँ बटन में स्क्रॉलव्यू हो सकते हैं, जो तब होते हैं जब आप किसी चेकबॉक्स की तरफ टास्कबार के ऊपर ड्रैग करने योग्य अंगूठे के साथ होवर करते हैं - या ऐसा कुछ। मुझे लगता है कि अलग - अलग लोगों के लिए अलग स्ट्रोक।
एक विकल्प जो जांच के लायक हो सकता है वह है WebKit का उपयोग आपके उपयोगकर्ता इंटरफ़ेस को रेंडर करने के लिए और आपके सभी UI को CSS / HTML / जावास्क्रिप्ट के साथ करने के लिए।
यहाँ एक ओपन सोर्स इम्प्लीमेंटेशन (बर्केलियम) है , और यहाँ एक क्लोज्ड सोर्स है, कमर्शियल इम्प्लिमेंटेशन (अवेशियम)
मैं सुझाव दूंगा IUP - पोर्टेबल यूजर इंटरफेस: http://www.tecgraf.puc-rio.br/iup/
मैंने इसे केवल लुआ प्रोग्रामिंग भाषा के साथ उपयोग किया है, लेकिन इसका उपयोग करना बहुत आसान था। यह केवल C, LED और Lua फ्लेवर में आता है लेकिन आप इसके लिए आसानी से एक रैपर बना सकते हैं।
मैं अपने गेम प्रोजेक्ट में व्यक्तिगत रूप से CEGUI का उपयोग कर रहा हूं, और यह एक बहुत मजबूत समाधान है। समस्या यह है कि कभी-कभी यह लगभग महसूस करता है कि एक छोटे से परिवर्तन को आपके बदलते टन को बदल दिया जाए।
मैंने इसका उपयोग नहीं किया है, लेकिन libRocket अभी पूरी तरह से मुफ्त है, सभी लाइसेंस फीस को हटा दिया है और क्या नहीं। इस lib के बारे में अच्छा हिस्सा यह है कि आप इसे html / css सिंटैक्स में लिखते हैं। http://librocket.com
बस एक दिलचस्प सुझाव उठाते हुए, अगर विंडोज के लिए गेम विकसित कर रहा है, तो Win32 एपीआई का उपयोग करें। बस सामान्य विंडोज़ नियंत्रणों का उपयोग करें (मैं एटीएल / डब्ल्यूटीएल लाइब्रेरीज़ का उपयोग करने की सिफारिश करूँगा) लेकिन उन्हें मालिक बना दिया।
मैंने इस तकनीक को पहले अनार्य टूर्नामेंट खेल में इस्तेमाल किया जा रहा है, जबकि पब से जारी हेडर (मॉड निर्माताओं के लिए) के माध्यम से देखा।
ऐसा करने के लिए एक प्रमुख लाभ आपके निपटान में पूरे विंडोज यूआई बुनियादी ढांचे के साथ-साथ कीबोर्ड दोहराने की दर, माउस संवेदनशीलता, डबल क्लिक गति, और अन्य चीजों के लिए उपयोगकर्ता की वरीयताओं को बनाए रखना है। इसके अलावा अगर आप नियमों का पालन करते हैं तो इंटरफ़ेस तेज़ और झिलमिलाहट मुक्त होगा।
कमियां यह हैं कि आपको अभी भी कुछ कोड लिखने होंगे, ताकि उन पर स्वामी को आकर्षित करने के लिए विंडो नियंत्रणों को उपवर्गित किया जा सके ताकि आप अपने स्वयं के ग्राफिक्स और प्रभावों को उन पर लागू कर सकें।
बस एक विचार के रूप में इसे बाहर फेंक रहे हैं।