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