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