पिछले कुछ वर्षों में मुख्यधारा के यूआई टूलकिट्स में वास्तव में कुछ दिलचस्प सफलताएं मिली हैं। गेम UI भी विकसित हो रहा है, लेकिन कुछ धीमी गति से। यह संभावना है क्योंकि एक पूर्ण विशेषताओं वाला यूआई सबसिस्टम विकसित करना अपने आप में एक महत्वपूर्ण उपक्रम है, और संसाधन निवेश को सही ठहराना मुश्किल है।
मेरा व्यक्तिगत पसंदीदा UI सिस्टम विंडोज प्रेजेंटेशन फाउंडेशन (WPF) है। यह वास्तव में यूआई भेदभाव के लिए अगले स्तर तक की क्षमता लेता है। यहां इसकी कुछ और दिलचस्प विशेषताएं हैं:
नियंत्रण डिफ़ॉल्ट रूप से "लुक-लेस" होते हैं। एक नियंत्रण तर्क और दृश्य उपस्थिति आम तौर पर decoupled है। हर नियंत्रण जहाज एक डिफ़ॉल्ट शैली और टेम्पलेट के साथ होता है, जो इसके डिफ़ॉल्ट दृश्य उपस्थिति का वर्णन करता है। उदाहरण के लिए, एक बटन को बाहरी आघात, एक ठोस रंग या ढाल पृष्ठभूमि और एक सामग्री प्रस्तुतकर्ता (कैप्शन पेश करने के लिए) के साथ एक गोल आयत के रूप में दर्शाया जा सकता है। डेवलपर्स (या डिजाइनर) कस्टम स्टाइल टेम्पलेट बना सकते हैं जो उपस्थिति को बदलते हैं और (एक हद तक) एक नियंत्रण का व्यवहार। एक नियंत्रण के सरल गुणों को ओवरराइड करने के लिए शैलियों का उपयोग किया जा सकता है, जैसे अग्रभूमि / पृष्ठभूमि रंग, टेम्पलेट, आदि; टेम्पलेट्स वास्तविक दृश्य संरचना को बदलते हैं।
शैलियों और टेम्पलेट्स में "ट्रिगर" शामिल हो सकते हैं। ट्रिगर कुछ घटनाओं या संपत्ति मूल्यों (या मूल्यों के संयोजन) के लिए सुन सकते हैं और शैली या टेम्पलेट के पहलुओं को सशर्त रूप से बदल सकते हैं। उदाहरण के लिए, बटन के बटन को आम तौर पर पृष्ठभूमि पर रंग बदलने के प्रयोजनों के लिए "IsMouseOver" संपत्ति पर ट्रिगर होता है जब माउस बटन पर होवर करता है।
यूआई तत्वों के कुछ अलग "स्तर" हैं जिनमें हल्के वजन वाले तत्वों से लेकर न्यूनतम कार्यक्षमता से लेकर पूर्ण-वजन वाले भारी-भरकम नियंत्रण शामिल हैं। यह आपको कुछ लचीलापन देता है कि आप अपने यूआई को कैसे तैयार करते हैं। UI तत्व वर्गों में से सबसे सरल UIElement
, कोई शैली या टेम्पलेट नहीं है और केवल सबसे सरल इनपुट घटनाओं का समर्थन करता है। स्टेटस इंडिकेटर जैसे सरल तत्वों के लिए, यह कार्यक्षमता आपके लिए आवश्यक हो सकती है। यदि आपको अधिक व्यापक इनपुट समर्थन की आवश्यकता होती है, तो आप FrameworkElement
(जो बढ़ाता है UIElement
) प्राप्त कर सकते हैं । पारंपरिक विगेट्स आम तौर पर प्राप्त होते हैं Control
, जो FrameworkElement
कस्टम शैली और टेम्पलेट समर्थन (अन्य चीजों के बीच) को बढ़ाता है और जोड़ता है।
WPF एक बरकरार, स्केलेबल, रिज़ॉल्यूशन-स्वतंत्र वेक्टर ग्राफिक्स मॉडल का उपयोग करता है। Windows पर, WPF अनुप्रयोगों को Direct3D का उपयोग करके गाया और रचा गया है।
WPF की शुरूआत में Xaml नामक एक नई घोषित प्रोग्रामिंग भाषा शामिल थी। Xml पर आधारित Xaml, UI "दृश्यों" की घोषणा के लिए पसंदीदा भाषा है। यह वास्तव में बहुत चालाक है, और हालांकि यह पहली नज़र में समान दिखाई दे सकता है, यह मूल रूप से एक्सयूएल (और बहुत शक्तिशाली) जैसी मौजूदा भाषाओं से अलग है।
WPF में एक बहुत ही उन्नत टेक्स्ट सबसिस्टम है। यह सभी का समर्थन करता है यदि सभी ओपन टाइप फ़ॉन्ट सुविधाएँ, द्विदिश क्लीयर टाइप एंटीएलियासिंग, सबपिक्सल पोजिशनिंग, आदि।
"ठीक है, महान, अब यह खेल विकास के लिए कैसे प्रासंगिक है?"
जब WPF अभी भी विकास में था (और "एवलॉन" के रूप में जाना जाता है), मैं जॉर्जिया टेक में एक वीडियो गेम डिज़ाइन पाठ्यक्रम ले रहा था। मेरी अंतिम परियोजना एक बारी-आधारित रणनीति खेल थी, और मैं बहुत सक्षम यूआई चाहता था। WPF / Avalon जाने के लिए एक अच्छे मार्ग की तरह लग रहा था क्योंकि इसमें पूर्ण विशेषताओं वाले नियंत्रणों का एक पूरा सेट था और यह मुझे उन नियंत्रणों के रूप और स्वरूप को पूरी तरह से बदलने की क्षमता रखता है। परिणाम कार्यक्षमता के स्तर के साथ एक सुंदर और कुरकुरा यूआई के साथ एक गेम था जिसे आप आमतौर पर केवल पूर्ण अनुप्रयोगों में देखते हैं।
अब, खेल के लिए WPF का उपयोग करने के साथ समस्या यह है कि यह काफी भारी है और अपने स्वयं के "सैंडबॉक्स" में प्रस्तुत करता है। उसके अनुसार, मेरा मतलब है कि डायरेक्ट 3 डी या ओपनजीएल गेम के माहौल में डब्ल्यूपीएफ की मेजबानी का कोई समर्थित तरीका नहीं है। एक WPF एप्लिकेशन के भीतर Direct3D सामग्री को होस्ट करना संभव है, लेकिन आप WPF एप्लिकेशन के फ्रैमरेट द्वारा सीमित होंगे, जो आम तौर पर आप चाहते हैं की तुलना में कम है। कुछ प्रकार के गेम के लिए, जैसे 2D रणनीति गेम (मेरे वर्तमान WPF गेम प्रोजेक्ट का स्क्रीनशॉट), यह अभी भी बहुत अच्छा काम कर सकता है। किसी और चीज के लिए, इतना नहीं। लेकिन आप अभी भी अपने खुद के यूआई ढांचे को विकसित करने में WPF के कुछ और अधिक सम्मोहक वास्तु अवधारणाओं को लागू कर सकते हैं।
WPF / G (WPF for Games) "] ( http://wpfg.codeplex.com/ ) नामक WPF का एक खुला-स्रोत, अप्रबंधित C ++ / Direct3D कार्यान्वयन भी है, जो विशेष रूप से दोनों Win32 में गेम में उपयोग के लिए डिज़ाइन किया गया है और विंडोज मोबाइल। सक्रिय विकास बंद हो गया है, लेकिन पिछली बार जब मैंने इसकी जाँच की, तो यह एक पूर्ण कार्यान्वयन था। टेक्स्ट सबसिस्टम वह क्षेत्र था जिसमें Microsoft के WPF कार्यान्वयन की तुलना में वास्तव में कमी थी, लेकिन यह गेम के लिए एक समस्या से कम नहीं है। मैं कल्पना करूंगा कि डायरेक्ट 3 डी-आधारित गेम इंजन के साथ डब्ल्यूपीएफ / जी को एकीकृत करना अपेक्षाकृत सरल होगा। इस मार्ग पर जाना आपको यूआई अनुकूलन के लिए व्यापक समर्थन के साथ एक अत्यंत सक्षम, रिज़ॉल्यूशन-स्वतंत्र यूआई फ्रेमवर्क प्रदान कर सकता है।
बस आपको यह अंदाजा लगाने के लिए कि WPF- आधारित गेम UI कैसा दिख सकता है, यहां मेरे पालतू प्रोजेक्ट से एक स्क्रीनशॉट है: