मैं कुछ वर्षों पहले MFC, QT, Forms, SWING और कई वेब-जीयूआई फ्रेमवर्क जैसे "बरकरार" जीयूआई सिस्टम (जो कि मेरा मतलब है उससे अधिक के बारे में नीचे) के साथ अनुप्रयोग विकास पर काम कर रहा है। मैंने हमेशा ज्यादातर GUI सिस्टम की अवधारणाओं को अत्यधिक जटिल और अनाड़ी पाया। कॉलबैक ईवेंट्स, श्रोताओं, डेटा प्रतियों की मात्रा, कुछ को स्ट्रिंग करने के लिए कुछ - रूपांतरण (और इसी तरह) हमेशा आवेदन में अन्य भागों की तुलना में गलतियों और सिरदर्द का स्रोत थे। (डेटा बाइंडिंग / मॉडल के "उचित" उपयोग के साथ भी)।
अब मैं कंप्यूटर गेम लिख रहा हूं :)। मैंने अब तक एक जीयूआई के साथ काम किया: मियागी (अच्छी तरह से ज्ञात नहीं है, लेकिन मूल रूप से सभी अन्य प्रणालियों के समान ही आइडिया है।)
यह बहुत घटिया था।
खेलों की तरह वास्तविक समय प्रदान करने वाले वातावरण के लिए, मुझे लगता है कि "बरकरार" जीयूआई सिस्टम और भी अधिक अप्रचलित हैं। उपयोगकर्ता इंटरफ़ेस को आमतौर पर ऑटो-लेआउट होने की आवश्यकता नहीं होती है या उनके पास रेसिजेबल विंडो ऑन-द-फ्लाई है। इसके बजाय, उन्हें हमेशा-बदलते डेटा (जैसे दुनिया में 3 डी मॉडल) के साथ बहुत कुशलता से बातचीत करने की आवश्यकता होती है
कुछ साल पहले, मैंने "IMGUI" पर ठोकर खाई, जो मूल रूप से एक तत्काल ग्राफिक्स मोड की तरह है, लेकिन उपयोगकर्ता इंटरफेस के लिए। मैंने बहुत अधिक ध्यान नहीं दिया, क्योंकि मैं अभी भी एप्लिकेशन डेवलपमेंट में था और IMGUI का दृश्य खुद को वास्तव में व्यापक या सफल नहीं लग रहा था। फिर भी वे जिस दृष्टिकोण को लेते हैं वह इतना सेक्सी और सुरुचिपूर्ण लगता है, कि यह मुझे यूआई के इस तरीके का उपयोग करके अगले प्रोजेक्ट के लिए कुछ लिखना चाहता है (मैं काम पर किसी को भी समझाने में विफल रहा :) (...)
मुझे संक्षेप में बताएं कि मुझे "बनाए रखने" और "तत्काल" से क्या मतलब है:
रिटायर्ड GUI: एक अलग इनिशियलाइज़ेशन चरण में, आप "GUI कंट्रोल" जैसे Labels, Buttons, TextBoxes आदि बनाते हैं और स्क्रीन पर रखने के कुछ वर्णनात्मक (या प्रोग्रामेटिक) तरीके का उपयोग करते हैं - सब कुछ होने से पहले। नियंत्रण X, Y स्थान, आकार, सीमा, बाल नियंत्रण, लेबल पाठ, चित्र और इसी तरह की स्मृति में अपने स्वयं के अधिकांश राज्य रखते हैं। आप घटनाओं से अवगत होने और GUI नियंत्रण में डेटा को अपडेट करने के लिए कॉलबैक और श्रोताओं को जोड़ सकते हैं।
तत्काल GUI: GUI लाइब्रेरी में एक-शॉट "RenderButton", "RenderLabel", "RenderTextBox" शामिल हैं ... फ़ंक्शंस (संपादित करें: Render द्वारा भ्रमित न होंउपसर्ग। ये कार्य मतदान उपयोगकर्ता इनपुट जैसे नियंत्रण के पीछे तर्क भी करते हैं, वर्ण सम्मिलित करते हैं, जब उपयोगकर्ता एक कुंजी वगैरह रखते हैं तो चरित्र-रिपीट-स्पीड को हैंडल करते हैं ...) जिसे आप "तुरंत" कॉल करके एक नियंत्रण प्रदान कर सकते हैं (doesn ') टी को तुरंत जीपीयू के लिए लिखा जाना चाहिए। आमतौर पर इसकी वर्तमान फ्रेम के लिए याद किया जाता है और बाद में एप्रॉपिएट बैचों में सॉर्ट किया जाता है)। पुस्तकालय इन के लिए कोई "राज्य" नहीं रखता है। यदि आप एक बटन छिपाना चाहते हैं ... बस रेंडरबटन फ़ंक्शन को कॉल न करें। सभी RenderXXX फ़ंक्शंस, जिसमें बटन या चेकबॉक्स की तरह उपयोगकर्ता इंटरैक्शन होता है, में रिटर्न मान होते हैं जो इंगित करते हैं कि जैसे उपयोगकर्ता ने बटन में क्लिक किया है। तो आपका "RenderGUI" फ़ंक्शन एक बड़ा अगर / अन्यथा फ़ंक्शन की तरह दिखता है, जहां आप अपने गेम स्टेट के आधार पर अपने RenderXXX फ़ंक्शंस को कॉल करते हैं या नहीं करते हैं और सभी डेटा अपडेट लॉजिक (जब एक बटन दबाया जाता है) प्रवाह में इंटरमेन्ग होता है। सभी डेटा स्टोरेज "बाहर" है और रेंडर कार्यों के लिए ऑन-डिमांड पारित किया गया है। (बेशक, आप बड़े कार्यों को कई लोगों में विभाजित करेंगे या गुई के भागों को समूहीकृत करने के लिए कुछ वर्ग सार का उपयोग करेंगे। हम 1980 की तरह कोड नहीं लिखते हैं, क्या हम;)
अब मैंने पाया कि यूनिटी 3 डी वास्तव में अपने अंतर्निहित जीयूआई सिस्टम में बहुत ही मूल दृष्टिकोण का उपयोग करता है। वहाँ शायद जीयूआई के एक जोड़े को इस दृष्टिकोण के साथ वहाँ भी हैं?
फिर भी .. जब चारों ओर देखते हैं, तो जीयूआई सिस्टम को बनाए रखने के लिए एक मजबूत पूर्वाग्रह प्रतीत होता है? यूनिटी 3 डी को छोड़कर कम से कम मुझे यह दृष्टिकोण नहीं मिला है और मूल आईएमजीयूआई समुदाय के बजाय लगता है .... शांत।
तो किसी ने दोनों विचारों के साथ काम किया है और कुछ मजबूत राय है?
संपादित करें: मैं उन रायों में सबसे अधिक दिलचस्पी रखता हूं जो वास्तविक दुनिया के अनुभव से उपजी हैं। मुझे लगता है कि तत्काल जीयूआई दृष्टिकोण के किसी भी "सैद्धांतिक कमजोरी" के बारे में आईएमजीयूआई-फोरम में बहुत गर्म चर्चाएं हैं, लेकिन मुझे हमेशा वास्तविक दुनिया की कमजोरियों के बारे में जानने के लिए अधिक ज्ञानवर्धक लगता है ।