C ++ GUI पुस्तकालय क्या सुझाव दे सकता है? [बन्द है]


26

मैं C ++ में अपना गेम इंजन बना रहा हूं और वर्तमान में यह तय कर रहा हूं कि मुझे किस यूजर इंटरफेस का उपयोग करना चाहिए।

क्या मुझे एक पुस्तकालय का उपयोग करना चाहिए? क्या मुझे अपना बनाना चाहिए?


3
यह स्पष्ट नहीं है कि आपका क्या मतलब है: इन-गेम जीयूआई? या उपकरण के लिए जीयूआई? प्रत्येक एक बहुत अलग आवश्यकता है ..
जेकमू

1
जब आपके पास एक इंजन (महाकाव्य संगीत)
R

1
यदि आपको केवल मोडल संवादों की आवश्यकता है, तो sourceforge पर छोटे फ़ाइल संवाद आपके प्रोजेक्ट में जोड़ने के लिए एक एकल C C ++ क्रॉस-प्लेटफ़ॉर्म फ़ाइल है। कोई
इनिट

जवाबों:


11

वास्तव में, Qt विगेट्स को OpenGL के साथ एकीकृत किया जा सकता है और OpenGL को Qt (QGLWidget) के साथ आसानी से एकीकृत किया जा सकता है। बेशक, प्लेटफ़ॉर्म नेटिव लुकिंग विजेट वह नहीं हो सकता है जो आप ढूंढ रहे हैं, लेकिन चिंता न करें, उन्हें कस्टमाइज़ करने के तरीके हैं, अपना खुद का बनाएं या कुछ और उपयोग करें जो आपकी आवश्यकताओं के अनुरूप बेहतर होगा, जैसे कि क्यूटी क्विक (जो आप के रूप में अच्छी तरह से एकीकृत करने में सक्षम होना चाहिए)।

यदि आप रुचि रखते हैं, तो इन लिंक को याद न करें: विजेट तीसरे आयाम में प्रवेश करते हैं: वुल्फेनक्यूटी और अपने विजेट्स को OpenGL के साथ तेज करें


9

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

एक गेम इंजन के लिए मैं एक तत्काल मोड 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/


4
IM GUI एक दिलचस्प अवधारणा है, लेकिन मैंने पाया है कि कुछ समस्याएं हैं, जब आप गेम खेलने की कोशिश करते हैं। यदि आप मेनू तत्वों को / बाहर चेतन करना चाहते हैं, तो आपको कुछ करना होगा जैसे कि सभी विजेट की अलग-अलग स्थिति को संशोधित करना, या उस कॉल के लिए GUI ट्रांसफ़ॉर्म मैट्रिक्स को संशोधित करना जैसे कुछ करना है। उदाहरण के लिए, यह आसान होगा, उदाहरण के लिए, एक विंडो कंटेनर जिसकी क्रियाओं का अनुवाद इसके बच्चों और इस तरह किया जाता है। इसके अलावा, किसी कारण से, अधिकांश IMGUI कार्यान्वयन में "अक्षम" विजेट राज्यों की कमी है।
तेतराद

@Tetrad: ऑटो-लेआउट, रिलेटिव पोज़िशन्स या एब्सोल्यूट पोज़िशन्स (एनवीआईडीआई विजेट्स ऐसा करता है) के साथ विजेट समूहों को लागू करना बहुत आसान है। यह आपको बहुत आसानी से विंडोज़ या पैनल के अंदर विजेट्स को शामिल करने देता है। "अक्षम" स्थिति के लिए, मैं यह नहीं देख सकता कि इसे तुच्छ रूप से क्यों लागू नहीं किया जाएगा। "गेमी चीजों" के लिए, मुझे लगता है कि तत्काल मोड अवधारणाएं वास्तव में बनाए रखा मोड से अधिक उपयुक्त हैं, क्योंकि विगेट्स हर फ्रेम अपडेट किए जाते हैं।
Oskar N.

7

व्यक्तिगत रूप से, मैं CEGUI की सिफारिश करूंगा । यह खुला स्रोत है और बहुत अच्छा है। हालाँकि, आपको जो ध्यान में रखना है वह यह है कि यह बहुत, बहुत क्रियात्मक हो सकता है यदि आप हाथ से सब कुछ लिखते हैं।

लेकिन, प्लस साइड पर, इसमें ओपनजीएल और डायरेक्टएक्स दोनों के लिए रेंडरर्स हैं। मैं इसे सामान्य रूप से उपयोग किए जाने वाले टेम्पलेट के शीर्ष पर रखने में कामयाब रहा, जो एक VBO का उपयोग करके सीधे बनावट को लिखता है (यह एक तरह का हैकी है)।

विचाराधीन गेम एक नेटवर्किंग असाइनमेंट के लिए था। असाइनमेंट में एक लॉबी के साथ एक नेटवर्क गेम था। मुझे पता था कि लॉबी बनाने के लिए गर्दन में दर्द होने वाला था, इसलिए मैंने एक पुस्तकालय उठाया, जो मेरे लिए सबसे ज्यादा काम करता था।


यह वही है जो मैं वर्तमान में उपयोग कर रहा हूं। मुझे लगता है कि हालांकि यह बहुत अधिक निर्भरता है। और मुझे इसे अपने प्रोजेक्ट (IIRC) से जोड़ने में परेशानी हुई, लाइसेंस ने कहा कि मैं केवल लाइब्रेरी से लिंक कर सकता हूं)
MrValdez

6
इसमें निर्भरताओं की हास्यास्पद मात्रा है। यह 50 एमबी के लिए मेरे छोटे डेमो खेल फूला हुआ है!
नाइट ६६६

क्या? मुझे लगता है कि आप गलत कर रहे हैं :) मेरे खेल में CEGUI DLL का वजन 3 एमबी से कम है। और MrValdez को: CEGUI BSD लाइसेंस के तहत है ..
jacmoe

एमआईटी लाइसेंस - क्षमा करें। CEGUI MIT लाइसेंस के अंतर्गत है। :)
जकॉमी

5

अधिकांश GUI पुस्तकालयों के साथ समस्या (Qt शायद सबसे लोकप्रिय C ++ एक है जो केवल Windows नहीं है) यह है कि अधिकांश एक इंजन में अच्छी तरह से एकीकृत नहीं होगा। पारंपरिक रूप से एक GUI ऐप में, GUI लाइब्रेरी मुख्य लूप को नियंत्रित करती है और आप घटनाओं के लिए कॉलबैक को हुक करते हैं। एक गेम इंजन में आप आम तौर पर लूप को नियंत्रित करना चाहते हैं, इसलिए यह सबसे अच्छा हो सकता है। हो सकता है कि आप किसी ऐसी चीज की तलाश कर रहे हों जो सिर्फ ड्राइंग कंट्रोल और डायलॉग्स को हैंडल करेगी और जैसे 3 डी संदर्भ में आप इसे पास करते हैं? उन लोगों को ढूंढना बहुत कठिन हो सकता है: - /


<pedantic> wxWidgets भी क्रॉस-प्लेटफॉर्म है </ pedantic> हालांकि मैं इंजन एकीकरण के बारे में आपकी बात लेता हूं
zebrabox

3
मैंने कहा, "सबसे लोकप्रिय", "केवल" नहीं :-P wx के पास 3 डी संदर्भों के साथ काम करने के लिए कम समर्थन है जो मैंने आखिरी बार देखा था।
कोडरंगर

4

मैं दृढ़ता से अपने खुद के लिखने पर विश्वास करता हूं, लेकिन फिर मैं बहुत सुनसान हूं। अभी तक एक और GUI लिब के साथ लड़ना सिर्फ एक चीज जो आप चाहते हैं कि मुझे नट्स चलाना है, इस तथ्य के साथ जोड़ा गया कि ज्यादातर गेम GUI काफी तुच्छ हैं, इसलिए आपको MDI और सुपर OO डिज़ाइन पर जाने की ज़रूरत नहीं है जहाँ बटन में स्क्रॉलव्यू हो सकते हैं, जो तब होते हैं जब आप किसी चेकबॉक्स की तरफ टास्कबार के ऊपर ड्रैग करने योग्य अंगूठे के साथ होवर करते हैं - या ऐसा कुछ। मुझे लगता है कि अलग - अलग लोगों के लिए अलग स्ट्रोक।


ऐसी स्थितियां हैं जहां "अपना खुद का लिखना" इतना अधिक स्थान नहीं है जितना कि कोई सोच सकता है। एक गेम जहां यूआई महत्वपूर्ण है, जैसे प्रबंधन खेल, या जटिल आइटम प्रबंधन के साथ आरपीजी; यूआई अनुभव का एक बड़ा हिस्सा होगा। joelonsoftware.com/articles/fog0000000007.html यदि यह एक मुख्य व्यवसाय कार्य है - इसे स्वयं करें, इससे कोई फर्क नहीं पड़ता
v.oddou

3

एक विकल्प जो जांच के लायक हो सकता है वह है WebKit का उपयोग आपके उपयोगकर्ता इंटरफ़ेस को रेंडर करने के लिए और आपके सभी UI को CSS / HTML / जावास्क्रिप्ट के साथ करने के लिए।

यहाँ एक ओपन सोर्स इम्प्लीमेंटेशन (बर्केलियम) है , और यहाँ एक क्लोज्ड सोर्स है, कमर्शियल इम्प्लिमेंटेशन (अवेशियम)


5
WebKit और इसके परिजन एक या दो बार एक ताज़ा दर की ओर अधिक ध्यान केंद्रित कर रहे हैं, इस तरह से एक एक्शन-उन्मुख गेम के लिए एक HUD करने के लिए मुश्किल हो सकता है। मेनू या धीमी बिट्स के लिए बहुत अच्छा होगा।
कोडरेंजर

1
@ कोडरंगर: आप पूरे खेल को जावास्क्रिप्ट / एचटीएमएल 5 में लिख सकते हैं। मैंने Chrome वेब स्टोर के लिए एक वाणिज्यिक एक्शन गेम प्रकाशित किया है जो WebKit / Chrome में ठीक 60 FPS पर चलता है।
शॉन मिडिलडाइच

3

मैं सुझाव दूंगा IUP - पोर्टेबल यूजर इंटरफेस: http://www.tecgraf.puc-rio.br/iup/

मैंने इसे केवल लुआ प्रोग्रामिंग भाषा के साथ उपयोग किया है, लेकिन इसका उपयोग करना बहुत आसान था। यह केवल C, LED और Lua फ्लेवर में आता है लेकिन आप इसके लिए आसानी से एक रैपर बना सकते हैं।


दिलचस्प लग रहा है। मैं जल्द से जल्द इसकी जाँच करने वाला हूँ।
MrValdez

3

मैं अपने गेम प्रोजेक्ट में व्यक्तिगत रूप से CEGUI का उपयोग कर रहा हूं, और यह एक बहुत मजबूत समाधान है। समस्या यह है कि कभी-कभी यह लगभग महसूस करता है कि एक छोटे से परिवर्तन को आपके बदलते टन को बदल दिया जाए।

मैंने इसका उपयोग नहीं किया है, लेकिन libRocket अभी पूरी तरह से मुफ्त है, सभी लाइसेंस फीस को हटा दिया है और क्या नहीं। इस lib के बारे में अच्छा हिस्सा यह है कि आप इसे html / css सिंटैक्स में लिखते हैं। http://librocket.com


2

बस एक दिलचस्प सुझाव उठाते हुए, अगर विंडोज के लिए गेम विकसित कर रहा है, तो Win32 एपीआई का उपयोग करें। बस सामान्य विंडोज़ नियंत्रणों का उपयोग करें (मैं एटीएल / डब्ल्यूटीएल लाइब्रेरीज़ का उपयोग करने की सिफारिश करूँगा) लेकिन उन्हें मालिक बना दिया।

मैंने इस तकनीक को पहले अनार्य टूर्नामेंट खेल में इस्तेमाल किया जा रहा है, जबकि पब से जारी हेडर (मॉड निर्माताओं के लिए) के माध्यम से देखा।

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

कमियां यह हैं कि आपको अभी भी कुछ कोड लिखने होंगे, ताकि उन पर स्वामी को आकर्षित करने के लिए विंडो नियंत्रणों को उपवर्गित किया जा सके ताकि आप अपने स्वयं के ग्राफिक्स और प्रभावों को उन पर लागू कर सकें।

बस एक विचार के रूप में इसे बाहर फेंक रहे हैं।


1
मेरा मानना ​​है कि win32 / COM का विस्टा और विन 7 पर अनुकरण किया गया है। उच्च प्रदर्शन के लिए अनुशंसित नहीं ...
स्टीफन फुरलानी

मुझे लगता है कि यह निर्भर करता है कि आप खेल में कितना GUI का उपयोग करेंगे। यदि यह सिर्फ मेनू सिस्टम के लिए है, तो वास्तव में कौन परवाह करता है, यदि आप इसे फ्रेम दर महत्वपूर्ण अनुभाग में बड़े पैमाने पर उपयोग कर रहे हैं, तो इसे कुछ काम और विचार की आवश्यकता है।
डेमिन

विस्टा और विंडोज 7 पर @StephenFurlani Win32 / COM का अनुकरण नहीं किया गया है, यह देशी और पूर्ण गति है। इसके अलावा ATL / WTL COM पर निर्भर नहीं है, लेकिन DirectX करता है।
डेमिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.