एंटिटी सिस्टम में UI / HUD को कैसे कोड करें?


18

मुझे लगता है कि मुझे पहले से ही एडम मार्टिन (टी-मशीन) से प्रेरित एंटिटी सिस्टम का विचार मिला। मैं अपने अगले प्रोजेक्ट के लिए इसका इस्तेमाल शुरू करना चाहता हूं।

मुझे पहले से ही Entity, Components, और Systems का मूल पता है। मेरी समस्या यह है कि UI / HUD को कैसे हैंडल किया जाए। उदाहरण के लिए, एक खोज विंडो, स्किल विंडो, कैरेक्टर इंफो विंडो आदि। आप यूआई इवेंट्स को कैसे हैंडल करते हैं (जैसे एक बटन दबाना)? ये ऐसे सामान हैं जिन्हें हर फ्रेम पर संसाधित करने की आवश्यकता नहीं है। वर्तमान में, मैं UI को कोड करने के लिए MVC का उपयोग कर रहा हूं, लेकिन मुझे नहीं लगता कि मैं एंटिटी सिस्टम के लिए संगत होगा।

मैंने पढ़ा है कि Entity System एक बड़े OOP पर एम्बेडेड है। मुझे नहीं पता कि UI ES के बाहर है या नहीं। मैं इसे कैसे एप्रोच करूं?

जवाबों:


17

हो सकता है कि आप इकाई प्रणालियों में बहुत अधिक सोच रहे हों। खेल में वस्तुओं, वस्तुओं, शत्रुओं, लिपियों, गोलियों, ट्रिगर्स इत्यादि के लिए गुंजाइश होती है।

शायद अगर आप अपने यूआई को अलग कर देते हैं, तो यह बेहतर और आसान तरीका होगा। आपको संस्थाओं के दायरे में सब कुछ करने की ज़रूरत नहीं है।


यह भी एडम मार्टिन ने अपने एक पोस्ट या टी-मशीन पर टिप्पणियों में कहा है। ES एक विशिष्ट समस्या के लिए एक समाधान है। यह खेल (इंजन) के अन्य पहलुओं के लिए अधिक 'पारंपरिक' समाधानों के साथ उपयोग किया जा सकता है और होना चाहिए।
user8363

धन्यवाद। मुझे यकीन नहीं है कि ईएस में क्या होना चाहिए। तो आप एक प्रभावी यूआई कोड कैसे बनाते हैं? मुझे लगता है कि एमवीसी इसमें कटौती नहीं करता है क्योंकि मुझे पदानुक्रम के साथ समस्या हो रही है।
सिलफेड

मैं देख रहा हूँ कि आप UI के लिए विभिन्न वास्तुकला का उपयोग करने के लिए सहमत हैं। फिर MVC के साथ क्या समस्या है?
नारेक

@Armen MVC को कोई समस्या नहीं है, लेकिन इसे संस्थाओं के दायरे में रखा गया है। यह सिर्फ इतना है कि इसके लाभ इसके नुकसान को हरा नहीं करेंगे। आर्किटेक्चर एस्ट्रोनॉट
Gustavo Maciel

3

जबकि मुझे लगता है कि एक इकाई / घटक यूआई काम कर सकता है, इसलिए इसे बनाना मुश्किल होगा। इसके अतिरिक्त, यह आपके खेल संस्थाओं को संसाधित करने के लिए आपके द्वारा बनाए गए घटकों और प्रणालियों से बहुत दूर है, यह अनिवार्य रूप से आपके खेल के भीतर एक और इकाई / घटक प्रणाली होगी। मैं सोच भी नहीं सकता कि दोनों के बीच बहुत अधिक ओवरलैप होगा।

एंटिटी सिस्टम कमाल के हैं और इन्हें हर जगह इस्तेमाल करना ललचा सकता है। आखिरकार, जब आपको वास्तव में मीठा हथौड़ा मिलता है, तो आपको नाखूनों की तरह अपनी सभी समस्याओं का इलाज करने के लिए लुभाया जाता है। हालाँकि, EC सिस्टम आपके प्रोग्रामिंग बैग में सिर्फ एक और उपकरण है। समस्याओं को हल करने के लिए इसका उपयोग किया जाता है यह वास्तव में अच्छी तरह से काम करता है, लेकिन आपके पास UI जैसी समस्याओं के लिए बेहतर उपकरण हैं।

GUIs के लिए वंशानुक्रम संरचना वास्तव में अच्छी तरह से काम करती है। न केवल यूआई घटक बनाने के लिए, बल्कि उन्हें बिछाने के लिए भी। यूआई घटकों को अन्य घटकों के बच्चे होने में सक्षम होना वास्तव में अच्छा है ताकि वे स्थिति, पैमाने और अस्पष्टता जैसे गुणों को प्राप्त कर सकें। यदि आप EC सिस्टम के साथ सेट अप करने की कोशिश कर रहे थे, तो आपको EC सिस्टम के कुछ नियम तोड़ने होंगे।


1

आप एक नया इंटरफ़ेस फंक्शन बना सकते हैं जिसे जब भी UI / HUD खींचा जाता है और उस फ़ंक्शन को लागू करने के लिए कस्टम / स्क्रिप्टेड घटकों को अनुमति देता है। इसके लिए IMGUI सिस्टम की आवश्यकता होती है (Google में इस पर बहुत सारे ट्यूटोरियल हैं, यह सिर्फ मूल प्रस्तुति है)। इसके साथ, आप विंडो को एक एंटिटी के रूप में बना सकते हैं जिसके अंदर आपका अपना यूआई-बिल्डिंग कंपोनेंट और एक विंडो फ्रेम रेंडर घटक होगा।

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

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