स्तर संपादक + गेम -> डुप्लिकेटिंग रेंडरिंग / गेम विशिष्ट कोड?


14

मैं एक खेल के लिए कोड डिजाइन करने के बारे में पढ़ रहा हूं। एक बात जो मैं समझ नहीं पा रहा हूं, वह यह है कि आप गेम से 'नकल' कोड के बिना बाहरी गेम स्तर के संपादक ('इन-गेम लेवल एडिटर') को लिखने का प्रबंधन कैसे करते हैं? उदाहरण के लिए, आपको विभिन्न प्रकार की संस्थाओं के बारे में सभी कोड कॉपी करने पड़ सकते हैं। आपको गेम रेंडरिंग कोड जोड़ना होगा।

मेरा अनुमान है कि यह खेल के 'इंजन' भाग से बाहर DLL बनाकर किया जा सकता है। फिर, इसे वास्तविक गेम और स्तर संपादक के बीच साझा करें।

या ऐसा करने का एक बेहतर / आसान तरीका है?

जवाबों:


13

आपको अपना कोड अलग-अलग प्रोजेक्ट (एक ही समाधान में) में अलग करना होगा। आमतौर पर आपके पास निम्न सेटअप होगा:

-Engine Core       (DLL)
-Game + Game Logic (EXE)
-Content Pipeline  (DLL)
-Editor            (EXE)

यहां तक ​​कि बड़ी परियोजनाओं के लिए आप कोर, भौतिकी, ग्राफिक्स, ऑडियो, इनपुट और नेटवर्किंग जैसी कई परियोजनाओं पर इंजन कोर को अलग करना चाह सकते हैं। ये सभी परियोजनाएं एक दूसरे को संदर्भित नहीं कर सकती हैं, लेकिन वे सभी संदर्भ कोर हैं जहां आप कुछ सामान्य आधार प्रकारों को संग्रहीत कर सकते हैं।

यदि वे एक-दूसरे का संदर्भ लेंगे तो अलगाव बेकार हो जाएगा।

वैसे भी इससे आपको अन्य परियोजनाओं में अपने इंजन के कुछ हिस्सों का पुन: उपयोग करने में मदद मिलेगी। संपादक के लिए उदाहरण के लिए आपको ग्राफिक्स प्रोजेक्ट को संदर्भित करना होगा जो कोर को ही संदर्भित करता है।

इस पृथक्करण का मतलब यह भी है कि अब आप अपने संपादक में WPF की तरह केवल Windows तकनीकों का उपयोग कर सकते हैं, जबकि आपका गेम अभी भी Windows और XBLIG को लक्षित कर सकता है।

WPF वातावरण के अंदर XNA का उपयोग करने के बारे में अधिक जानकारी के लिए इस लिंक को देखें: http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- की एक WPF-application.aspx


धन्यवाद! थोड़ा और चारों ओर देखने पर मुझे यह मिला - create.msdn.com/en-US/education/catalog/sample/… - ऐसा प्रतीत होता है कि WinForms WPF से बेहतर समर्थित है!
उत्कर्ष सिन्हा

अरे यह सच है, लेकिन यह नमूना 2008 से है, इससे पहले कि WPF वास्तव में जमीन पर उतर गया। मैंने एक साल पहले WinForms से WPF में स्विच किया है और मैं दुनिया के लिए वापस स्विच नहीं करूंगा :)। यदि आप उस नमूने के साथ संगत रहना चाहते हैं तो आप हमेशा WPF ऐप में WinFormsControlHost का उपयोग कर सकते हैं :)।
रॉय टी।

4

अपने गेम इंजन को डिज़ाइन करते समय वास्तविक गेम लॉजिक से सर्वश्रेष्ठ के रूप में रेंडरिंग लॉजिक को अलग करें। ऐसा करने का एक तरीका यह है कि अपने गेम इंजन का निर्माण करते समय घटक पैटर्न का उपयोग करें। उदाहरण के लिए, XNA लचीलेपन के लिए फ्रेमवर्क स्तर पर इस पैटर्न का उपयोग करता है। अपने स्तर के संपादक के साथ प्रतिपादन के लिए समान कोड-आधार का उपयोग करें; अगर आपको करना है तो रैपर लिखें।

इसी तरह, एक और लोकप्रिय पैटर्न MVC (मॉडल-व्यू-कंट्रोलर) है जो मदद भी कर सकता है। सामान्य रूप से MVC का उपयोग करके अपने इंजन को कोड करें। फिर आप दृश्य और मॉडल के लिए समान कोड का उपयोग कर सकते हैं, लेकिन गेम इंजन के नियंत्रक के बजाय अपने स्तर के संपादक के लिए मॉडल को संपादित करने के लिए एक कस्टम नियंत्रक को इंजेक्ट करें जो गेम इनपुट के अनुसार अपडेट करता है। खेल मॉडल के लिए सीरियलकरण को लागू करें उन्हें संपादक या गेम से लोड करने / बचाने के लिए।

अलग-अलग विधानसभाओं में घटक रखने से निश्चित रूप से अलगाव को बढ़ावा मिलेगा ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.