इकाई / घटक प्रणाली और UI "इकाई"


14

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

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

यूआई / जीयूआई चिंता कैसे और कहाँ) एक इकाई / घटक प्रणाली में फिट होती है?

(ध्यान दें: यह प्रश्न प्लेटफ़ॉर्म अज्ञेयवादी है क्योंकि यह कई प्लेटफार्मों / भाषाओं पर लागू होता है)


3
मुझे लगता है कि यह केवल आपके लिए तर्कसंगत लगता है क्योंकि आप 2 डी गेम बना रहे हैं। कल्पना कीजिए कि आप 3 डी गेम बनायेंगे (2 डी गुई के साथ) लगभग किसी भी प्रतिपादन तर्क का पुन: उपयोग नहीं किया जा सकता है, और 3 डी दुनिया के अंदर 2 डी गुई घटक बहुत समझ में नहीं आएंगे। आपको घटक प्रणाली के शीर्ष पर GUI का निर्माण करना चाहिए। जैसे कि आपका गेमप्लेस्क्रीन स्क्रीन बनाने के लिए घटकों के साथ इकाई दुनिया है, और घटकों में से एक "कैनवास" के साथ कैमरा होगा जिसे आपका रेंडरर आकर्षित करेगा। और वह कैनवास उस स्क्रीन की पृष्ठभूमि बन जाएगा।
काइकिमारु

1
@Kikaimaru आपके पास 2D के बारे में एक बिंदु है। शायद मैं एमवीसी में बहुत अधिक हूं, लेकिन यह "मॉडल" (गेम एंटिटीज) और व्यू / कंट्रोलर (यूआई घटकों) के मिश्रण जैसा लगता है। यह काम करता है, निश्चित है, लेकिन क्या यह काम करना चाहिए ? क्या बेहतर तरीके हैं? दूसरे कैसे करते हैं?
ashes999

@ ashes999 आपकी टिप्पणी और प्रारंभिक प्रश्न मेरे दिल के अंदर गहरे से है :)
Narek

@Armen मुझे कभी भी इसका संतोषजनक उत्तर नहीं मिला।
as999999

@ मुझे ashes999 हर जगह लोग कहते हैं कि आपको ECS के साथ MVC नहीं मिलाना चाहिए, लेकिन क्यों? यह अच्छा नहीं होगा? विभिन्न कार्यों के लिए अलग हथियार, क्या आप सहमत नहीं हैं?
नारेक

जवाबों:


4

कई इकाई-घटक प्रणालियों, विशेष रूप से CraftyJS का उपयोग करने के बाद, मुझे कम या ज्यादा मेरे सवाल का जवाब मिला: हाँ, आप GUI के लिए घटकों (विशेष रूप से स्प्राइट या छवियों और 2 डी गेम में माउस-क्लिक हैंडलर) का पुन: उपयोग कर सकते हैं।

ज्यादातर समय, आपके पास केवल ईसीएस तक पहुंच होती है, न कि अंतर्निहित सिस्टम (जैसे। ड्राइंग सिस्टम)। इस मामले में, घटकों का उपयोग करना ठीक है, क्योंकि आपके पास कोई अन्य विकल्प नहीं है।

यदि आपके पास अंतर्निहित प्रणाली तक पहुँच है (उदाहरण के लिए। Curses के लिए सीधी पहुँच के साथ रूबी roguelike), तो आप पा सकते हैं कि उस सिस्टम पर सीधे ड्राइंग / रेंडरिंग अधिक प्रभावी है (कम कोड, कम नाजुक, अधिक प्राकृतिक)। संस्थाओं और घटकों।


आप उन्नत UI तत्वों का तर्क कहाँ देते हैं? अर्थात। एक स्वास्थ्य पट्टी जो खिलाड़ी को हिट होने और बार को कम करने के लिए कितना जानना चाहती है। मुझे एहसास नहीं हो सकता है कि क्या इसे एक विशिष्ट प्रणाली, या एक स्क्रिप्ट या कुछ और की आवश्यकता है ...
अमीर लीमा

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

लेकिन उस वास्तुकला में स्वास्थ्य-पट्टी वस्तु क्या है? क्या यह "स्वास्थ्य पट्टी" घटक के साथ एक इकाई है? एक वर्ग जो एंटिटी से विरासत में मिला है? अद्यतन के साथ एक सामान्य वस्तु हार्ड कोडित है?
अमीर लीमा

1
@EmirLima I एक इकाई के रूप में स्वास्थ्य पट्टी और एक इकाई के रूप में खिलाड़ी को मॉडल करेगा। आप जो कर सकते हैं, उससे आपको कोई मतलब नहीं है।
ashes999

1

2 डी या 3 डी में, एक इकाई घटक प्रणाली (ईसीएस) को कम से कम जीयूआई प्रणाली तक पहुंच होनी चाहिए, अगर यह उसी ईसीएस का हिस्सा नहीं है।

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

उदाहरण के लिए, मुझे लगता है कि जीयूआई संस्थाओं के लिए घटक कुछ इस तरह होंगे position, renderऔरgui । जहां GUI घटक GUI निकाय के कार्य के प्रकार को परिभाषित करेगा। हालाँकि, यह क्रिया विशिष्ट और विशिष्ट होने वाली है। यह सिस्टम में परिणाम है जो GUI घटकों को बहुत बड़ा बनाता है और अनिवार्य रूप से प्रत्येक GUI फ़ंक्शन (लोड गेम, गेम सहेजें, सर्वर ढूंढें, आदि) को संभालने के लिए डिज़ाइन किया गया है। गन्दा लगता है।

मैं प्रत्येक GUI "स्क्रीन" के लिए एक मानक वर्ग फ़ाइल करना पसंद करूँगा। उस स्क्रीन के लिए सभी कार्यक्षमता एक ही स्थान पर (सामान्य कार्यक्षमता वर्ग के संदर्भ में) रखें। यह एक बहुत बकवास है और प्रबंधन करने में आसान है।

हालांकि, जैसा कि मैंने कहा, ईसीएस को जीयूआई प्रणाली तक पहुंच होनी चाहिए। यह अपने सिस्टम में संस्थाओं के आधार पर जीयूआई को जानकारी की आपूर्ति करने में सक्षम होने की आवश्यकता है। उदाहरण के लिए, एक संबद्ध इकाई पर मंडराते हुए उस इकाई के बारे में सभी जानकारी के साथ एक GUI विंडो को पॉप अप करेगा। जहां एक दुश्मन एकता पर मँडरा सीमित जानकारी के साथ एक जीयूआई खिड़की पॉप अप होगा। आप संभवतः दोनों के बीच अंतर जानने के लिए GUI को प्रोग्राम नहीं करना चाहते हैं, आप इकाई से इसकी जानकारी प्रदर्शित करने के लिए कहना चाहते हैं।

इसलिए, संस्थाओं को अभी भी किसी प्रकार के जीयूआई घटक की संभावना होगी, लेकिन वे "गेम" संस्थाओं में होंगे, जीयूआई संस्थाएं नहीं। यह घटक उनके GUI इंटरफ़ेस को बनाने के लिए बाहरी GUI सिस्टम का उपयोग करेगा।


मेरे पास मौजूद सिस्टम की तरह लगता है कि आपके द्वारा वर्णित एक से काफी अलग है। मेरे पास इकाई वर्ग हैं जैसे TouchButtonएक स्प्राइटशीट और एक स्पर्श-क्लिक-श्रोता से बना है। यूनिट पॉपअप के लिए, मैं संभवतः स्प्राइट घटक + माउस श्रोता घटक के संयोजन के रूप में लागू करूंगा। हम्म।
ashes999
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.