2012-12-05 19 views
5

में कुशल इकाई प्रणाली लिखें, मैं सी ++ में एक कुशल "इकाई प्रणाली" बनाने की कोशिश कर रहा हूं, मैंने बहुत सारी जानकारी प्राप्त करने के लिए इंटरनेट पर बहुत सारे ब्लॉग/लेख/दस्तावेज पढ़े हैं लेकिन मुझे मिल गया है कुछ सवाल फिर से।सी ++

मैं दो दिलचस्प विषयों को खोजने है:

  • डेटा पर ही आधारित प्रणाली
  • इकाई घटक प्रणाली

मेरे लिए, दो प्रणालियों बहुत समान लग रहे हो।

तो, मैं एडम स्मिथ द्वारा इस उदाहरण मिल गया है:

// Abstract class 
class Component 
{ 
    // data here 
} 

// exemple 
class Car : public Component 
{ 
    // Data here 
} 

// Entity with components 
class Entity 
{ 
    std::vector<Component*> components; 
} 

तो, अगर मेरी इकाई निम्नलिखित घटकों: https://stackoverflow.com/a/2021868

मैं इस तरह एक लचीला सिस्टम होना चाहिए कार, ट्रांसफॉर्म, स्प्राइट, क्या मेरे घटकों के सरणी में डेटा-संचालित सिस्टम जैसे रैखिक डेटा होंगे?

अब, मैं सिस्टम है:

class System 
{ 
    virtual void init(); 
    virtual void clear(); 
    virtual void update(); 

    std::unordered_map< const char*, Entity*> entities; 
} 

class RendererSystem : public System 
{ 
    // Methods's definition (init, clear, …). 

    void update() 
    { 
     for(entity, …) 
     { 
      Sprite* s = entity->getComponent('sprite'); 
      ... 
     } 
    } 
} 
  • मैं पढ़ा है कि आभासी कार्यों खराब हैं, यह उस स्थिति में बुरा है?
  • घटक प्राप्त करें एक static_cast की आवश्यकता है, यह बुरा है?
  • डेटा संचालित प्रणाली में, मैंने हर जगह पॉइंटर देखा, सी "मूल" चर कहां है, मुझे हर जगह नया रखना होगा या मेरे पास एक ही डेटा के साथ एक कक्षा होगी?
  • क्या मैंने यह अधिकार बनाया?

ये सभी अंक मेरे दिमाग में "धुंधला" दिखते हैं।

+5

आइटम के संदर्भ को संदर्भित करेंगे, यह मेरे दिमाग में "धुंधला" जैसा दिखता है। आप क्या हासिल करने की कोशिश कर रहे हैं, और आप इसके साथ क्या _concrete_ समस्याओं का सामना करते हैं? डिज़ाइन buzzwords की सूची से आइटम छेड़छाड़ करने की चिंता न करें। –

+0

मुझे एक कुशल घटक प्रणाली चाहिए। मैंने इकाई के बाहर घटक के साथ एक इकाई प्रणाली बनाई है लेकिन पुराने मोबाइल और टैबलेट पर प्रदर्शन बहुत अच्छा नहीं है। तो मुझे डेटा संचालित लगता है और यह बहुत दिलचस्प लग रहा है, इसलिए मैं इसे आजमा देना चाहता हूं। – Sooner

+1

आप फिर से buzzwords सूचीबद्ध कर रहे हैं! आप एक "घटक प्रणाली" क्यों चाहते हैं और यह स्रोत फ़ाइल में कक्षाओं के समूह से अलग कैसे बनाता है? –

उत्तर

1
  1. आभासी कार्यों कुछ भूमि के ऊपर लेकिन कुछ भी है कि आप के बारे में जब तक आप प्रति सेकंड कॉल के लाखों लोगों से कर रहे हैं तो सिर्फ इतना है कि इस तथ्य की अनदेखी ध्यान देना चाहिए की क्या ज़रूरत है।
  2. एक स्थैतिक कलाकार स्वयं से बुरा नहीं है, लेकिन यह स्थिर प्रकार की जांच को तोड़ देता है जहां इसका उपयोग किया जाता है ताकि यदि आप उस ऑब्जेक्ट के अंदर व्यवहार को स्थानांतरित कर सकें जिस पर आपने डाला है ताकि आप विशिष्ट रनटाइम को जानने के बिना उचित विधि को कॉल कर सकें किसी ऑब्जेक्ट का उदाहरण तो यह बेहतर है
  3. यह स्पष्ट नहीं है कि आप क्या पूछ रहे हैं, भले ही आपके पास डेटा-संचालित दृष्टिकोण में तत्व के वैक्टर हैं, संग्रह में प्रत्येक तत्व को new (यदि यह पॉइंटर है) के साथ आवंटित करने की आवश्यकता है, । फिर एक बार जब आप इसे आवंटित कर लेंगे तो आपको इसे फिर से करने की आवश्यकता नहीं होगी जैसे ही आप
+0

1. ठीक है धन्यवाद। 2. उस मामले में यह संभव नहीं है, मुझे अलग-अलग व्यवहार के साथ व्यक्तिगत रूप से प्रत्येक घटक पर काम करने की आवश्यकता है। 3. ठीक है, तो अगर मेरे पास "घटक *" का वेक्टर है, तो मेरी सरणी रैखिक होगी (केवल कार से भरेगी, तो स्मृति में एक ही आकार? [लिंक] http://fr.slideshare.net/DICEStudio/ परिचय करने के लिए डेटा उन्मुख डिजाइन # btnNext [कड़ी]) – Sooner