मैं स्वीकार करता हूं, मैंने अति प्रयोग और यहां तक कि विरासत का दुरुपयोग करने का पाप किया है। पहला (टेक्स्ट) गेम प्रोजेक्ट जो मैंने तब बनाया था जब मैं अपना OOP कोर्स ले रहा था, "डोर" और "अनलॉक डोर" से "डोर" और "रूम विद वन डोर", "रूम विद टू डोर", और इसलिए "रूम" से।
ग्राफिकल) गेम के साथ मैंने हाल ही में काम किया, मुझे लगा कि मैंने अपना सबक सीखा है और विरासत का उपयोग करने की एक सीमा रखी है। हालाँकि मैंने देखा कि समस्याएं जल्द ही सामने आने लगी हैं। मेरा जड़ वर्ग अधिक से अधिक प्रस्फुटित होने लगा था, और मेरा पत्ता वर्ग डुप्लिकेट कोड से भरा हुआ था।
मुझे लगा कि मैं अभी भी चीजें गलत कर रहा हूं, और इसे ऑनलाइन देखने के बाद मुझे पता चला कि मैं इस समस्या के साथ अकेला नहीं था। यह है कि मैंने कुछ गहन शोध के बाद एंटिटी सिस्टम की खोज कैसे की (पढ़ें: googlefu)
जब मैंने इस पर पढ़ना शुरू किया, तो मैं यह देख पा रहा था कि घटकों के साथ पारंपरिक ओओपी पदानुक्रम के साथ होने वाली समस्याओं को हल करने में यह कितना स्पष्ट रूप से सक्षम था। हालाँकि पहले रीडिंग में ये थे। जब मैं और अधिक ... "कट्टरपंथी" ईएस दृष्टिकोण पर ठोकर खाई, जैसे कि टी-मशीन पर एक ।
मैं उन तरीकों से असहमत होने लगा, जो वे इस्तेमाल कर रहे थे। एक शुद्ध घटक प्रणाली या तो overkill लग रहा था, या बल्कि unintuitive, जो शायद OOP की ताकत है। लेखक का कहना है कि ES प्रणाली OOP के विपरीत है, और यह OOP के साथ प्रयोग करने योग्य हो सकता है, यह वास्तव में नहीं होना चाहिए। मैं यह नहीं कह रहा हूं कि यह गलत है, लेकिन मैं सिर्फ एक समाधान की तरह महसूस नहीं कर रहा हूं जिसे मैं लागू करना चाहता हूं।
इसलिए मेरे लिए, और पोस्ट की शुरुआत में होने वाली समस्याओं को हल करने के लिए, मेरे अंतर्ज्ञान के खिलाफ जाने के बिना, अभी भी एक पदानुक्रम का उपयोग करना है, हालांकि यह उन लोगों की तरह एक अखंड पदानुक्रम नहीं होगा जैसे मैंने पहले इस्तेमाल किया था, लेकिन नहीं एक बहुपत्नी एक (मैं अखंड के विपरीत एक शब्द नहीं मिल सका), जिसमें कई, छोटे पेड़ होते हैं।
निम्नलिखित उदाहरण से पता चलता है कि मेरा क्या मतलब है (यह गेम इंजन आर्किटेक्चर, अध्याय 14 में पाए गए एक उदाहरण से प्रेरित है)।
मेरे पास वाहनों के लिए एक छोटा पेड़ होगा। रूट वाहन वर्ग में एक रेंडरिंग घटक, एक टक्कर घटक, स्थिति घटक आदि होगा।
फिर एक टैंक, वाहन का एक उपवर्ग इसमें से उन घटकों को प्राप्त करेगा, और इसे स्वयं "तोप" घटक दिया जाएगा।
वर्णों के लिए वही जाता है। एक चरित्र में इसके अपने घटक होंगे, फिर प्लेयर क्लास इसे इनहेरिट करेगा, और एक इनपुट कंट्रोलर दिया जाएगा, जबकि अन्य शत्रु वर्ग कैरेक्टर क्लास से वारिस होंगे और एआई कंट्रोलर दिया जाएगा।
मैं वास्तव में इस डिजाइन के साथ कोई समस्या नहीं देखता हूं। एक शुद्ध इकाई नियंत्रक प्रणाली का उपयोग नहीं करने के बावजूद, बुदबुदाती हुई समस्या के साथ समस्या, और बड़े रूट वर्ग को बहु-वृक्ष पदानुक्रम का उपयोग करके हल किया जाता है, और भारी, कोड डुप्लिकेटिंग लीफ़्स की समस्या तब से चली जाती है जब से रिसाव नहीं होता है घटकों के साथ शुरू करने के लिए कोई भी कोड है। यदि किसी परिवर्तन को लीफ लेवल पर करने की आवश्यकता है, तो कोड को हर जगह चिपकाने के बजाय एकल घटक को बदलना उतना ही सरल है।
बेशक, मैं जितना अनुभवहीन हूं, मुझे कोई समस्या नहीं दिखी, जब मैंने पहली बार एकल पदानुक्रम, वंशानुक्रम भारी मॉडल का उपयोग करना शुरू किया था, इसलिए यदि उस मॉडल के साथ कोई समस्या है जिसे मैं वर्तमान में लागू करने के बारे में सोच रहा हूं, तो मैं नहीं करूंगा। इसे देखने में सक्षम हो।
आपके विचार?
पुनश्च: मैं जावा का उपयोग कर रहा हूं, इसलिए सामान्य घटकों का उपयोग करने के बजाय इसे लागू करने के लिए कई विरासत का उपयोग करना संभव नहीं है।
PPS: इंटरकम्पॉर्टेंट संचार एक दूसरे पर निर्भर घटकों को जोड़कर किया जाएगा। यह युग्मन को जन्म देगा, लेकिन मुझे लगता है कि यह एक अच्छा व्यापार है।