मैं घटक आधारित इकाई डिजाइन के आसपास अपना सिर पाने की कोशिश कर रहा हूं।
मेरा पहला कदम विभिन्न घटकों को बनाना था जिन्हें किसी वस्तु में जोड़ा जा सकता था। प्रत्येक घटक प्रकार के लिए मेरे पास एक प्रबंधक था, जो हर घटक के अपडेट फ़ंक्शन को कॉल करेगा, जो कि कीबोर्ड राज्य आदि जैसी चीजों में आवश्यक हो।
अगली चीज जो मैंने की वह थी ऑब्जेक्ट को हटा देना, और बस एक आईडी के साथ प्रत्येक घटक है। तो एक वस्तु समान Ids वाले घटकों द्वारा परिभाषित की जाती है।
अब, मैं सोच रहा हूं कि मुझे अपने सभी घटकों के लिए प्रबंधक की आवश्यकता नहीं है, उदाहरण के लिए मेरे पास एक है SizeComponent
, जिसमें बस एक Size
संपत्ति है)। परिणामस्वरूप SizeComponent
अद्यतन विधि नहीं है, और प्रबंधक की अद्यतन विधि कुछ भी नहीं करती है।
मेरा पहला विचार एक ObjectProperty
वर्ग था जो घटकों के गुणों के रूप में होने के बजाय, जो घटक क्वेरी कर सकता था। तो एक वस्तु की संख्या ObjectProperty
और होगी ObjectComponent
। अवयवों में अद्यतन तर्क होगा जो गुणों के लिए ऑब्जेक्ट को प्रश्न करता है। प्रबंधक घटक के अद्यतन विधि को कॉल करने का प्रबंधन करेगा।
यह मुझे ओवर-इंजीनियरिंग की तरह लगता है, लेकिन मुझे नहीं लगता कि मैं घटकों से छुटकारा पा सकता हूं, क्योंकि मुझे प्रबंधकों को यह जानने के लिए एक तरीके की आवश्यकता है कि किन वस्तुओं को चलाने के लिए घटक तर्क की आवश्यकता है (अन्यथा मैं सिर्फ घटक को हटा दूंगा पूरी तरह से और प्रबंधक में अपने अद्यतन तर्क को धक्का)।
- इस (चल रहा है
ObjectProperty
,ObjectComponent
औरComponentManager
वर्ग) से अधिक इंजीनियरिंग? - एक अच्छा विकल्प क्या होगा?
RenderingComponent
और ए द्वारा किया जाता है PhysicsComponent
। क्या मैं यह सोचकर कि संपत्ति कहां रखूं? क्या मुझे इसे या तो चिपका देना चाहिए, फिर अन्य क्वेरी के लिए आवश्यक संपत्ति वाले घटक के लिए एक वस्तु है?
PhysicalStateInstance
(एक प्रति वस्तु) एक GravityPhysicsShared
(प्रति खेल) के साथ; हालाँकि, मुझे यह कहने के लिए लुभाया जाता है कि यह वास्तुविदों के अहसास में बँधा हुआ है, अपने आप को एक छेद में न बांधें (वास्तव में मैंने अपने पहले घटक प्रणाली के साथ जो किया था)। चुम्मा।
SizeComponent
ओवरकिल बनाना है - आप मान सकते हैं कि अधिकांश वस्तुओं का आकार है - यह प्रतिपादन, एआई और भौतिकी जैसी चीजें हैं जहां घटक मॉडल का उपयोग किया जाता है; आकार हमेशा समान व्यवहार करेगा - इसलिए आप उस कोड को साझा कर सकते हैं।