2014-12-17 4 views
5

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

  • तो राक्षस एक इकाई वर्ग जो स्क्रीन

  • PhysX पर इकाई को नियंत्रित करेगा भी एक PxActor वर्ग जो PhysX में अभिनेता स्थिति में काम करता है के बारे में जानकारियां शामिल होता है।

  • क्वांटम आवरण अंत में, इंजन एक इकाई वर्ग जो कम से कम दो सदस्यों ही होगी एक QEntity वर्ग जो इंजन और PhysX

  • के बीच एक परत के रूप में कार्य करना होगा, ogre इकाई वस्तु और क्वांटम इकाई। प्रत्येक update() पर यह QEntity से पूछेगा कि क्या है और ogre इकाई स्थिति को अपडेट करें।

समस्या स्पॉट? एक इकाई के लिए 4 कक्षाएं? और याद रखें कि हमें कम से कम 60 बार/सभी चार इकाइयों तक पहुंचने की जरूरत है! तो डेटा विभाजन के बारे में क्या? वास्तव में अनुकूलित नहीं है। इसके अलावा, एआई के लिए एक और कक्षाएं हो सकती हैं, एक स्क्रिप्टिंग इंजन के लिए ...

+1

मुझे आपका दर्द महसूस होता है। प्रत्येक बार जब मैं एक गेम बनाने और युग्मन को कम करने की कोशिश करता हूं तो मैं उन कार्यों की बड़ी श्रृंखलाओं के साथ समाप्त होता हूं जो केवल बड़ी संख्या में तर्कों के साथ अन्य कार्यों को कॉल करते हैं। – SlySherZ

उत्तर

4

एकाधिक संदर्भों में एक ही चीज़ का प्रतिनिधित्व करने के लिए कई कक्षाओं की वस्तुओं का उपयोग करना स्वयं में एक बुरी चीज नहीं है। वास्तव में, यदि आप इन सभी संदर्भों में एक ही ऑब्जेक्ट का उपयोग करते थे तो यह संभवतः बदतर होगा - उदाहरण के लिए, एकाधिक विरासत के कुछ रचनात्मक उपयोग के माध्यम से।

आपका QEntity वर्ग पहले से ही आप के लिए decoupling करता है - जब तक आप इसके इंटरफेस करने के लिए कार्यक्रम, और नहीं करता है PhysX के विशिष्ट वर्गों QEntity* के इंटरफ़ेस से "बाहर छड़ी", तो आप अच्छे हैं।

ऐसा लगता है कि आपकी परियोजना "पुल" कक्षाओं में युग्मन शुरू करती है, जो वास्तव में संबंधित है। जब तक आप इसे वहां रखते हैं, तब तक आपके डिज़ाइन में युग्मन समस्या नहीं होगी।

जहां तक ​​60 एफपीएस चला जाता है, डिजाइन चरण में इसके बारे में चिंता न करें। जब तक वर्चुअल फ़ंक्शंस पर निर्भर ज़िम्मेदारी की कोई लंबी श्रृंखला नहीं होती है, तब तक आपका कंपाइलर आपके लिए इसे अनुकूलित करने के लिए एक अच्छी नौकरी करने में सक्षम होना चाहिए।

* उदाहरण के लिए, QEntity पैरामीटर स्वीकार या ऑब्जेक्ट को PhysX लिए विशिष्ट हैं, एक निर्माता है कि एक "आवरण" बनाता में छोड़कर वापस नहीं करना चाहिए।

+0

धन्यवाद, इसलिए आखिरकार यह बुरा नहीं है। बस एक सवाल: डेटा विभाजन इस तरह के पैटर्न के साथ काम करेगा? मेरा मतलब है, ओग्रे इकाई और PxActor स्मृति में एक दूसरे से दूर हो सकता है, इसलिए एल 3 कैश बेकार होगा। – Vinz243

+1

@ Vinz243 यह कार्यान्वयन पर निर्भर करता है। यदि दो एपीआई आपको पॉइंटर्स के माध्यम से ओग्रे इकाई और PxActor तक पहुंचने की आवश्यकता होती है (जैसा कि आप उन्हें मूल्य के रूप में उपयोग करने के विरोध में हैं) तो डेटा स्मृति के विभिन्न क्षेत्रों में समाप्त हो सकता है।अगर वे आपको अपनी ऑब्जेक्ट्स को अपने अंदर एम्बेड करने देते हैं, तो दो संबंधित ऑब्जेक्ट्स एक दूसरे के बगल में स्मृति में समाप्त हो जाएंगे। आम तौर पर एल 3 कैश प्रभावों के कारण होने के कारण यह बहुत जल्दी होता है जब तक कि आप कम से कम एक प्रोटोटाइप पर कोड पूर्ण होने के करीब न हों, वास्तविक प्रणाली नहीं, और निश्चित रूप से आपके कोड से "कम लटकते फल" को समाप्त करने और समाप्त करने से पहले बहुत जल्दी। – dasblinkenlight

+0

यदि आपको कोई फर्क नहीं पड़ता है तो एक अंतिम प्रश्न: चूंकि कई संस्थाएं हैं, क्या मुझे नामस्थानों का उपयोग करना चाहिए या क्वांटम इकाई QEntity नाम देना चाहिए? – Vinz243

संबंधित मुद्दे