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