2012-11-12 10 views
6

मैं इस तरह के विन्यास के साथ एक CCSpriteBatchNode है:सीसीएसप्रिट बैच नोड: क्या चाइल्ड चाइल्ड ड्राइंग प्रदर्शन लाभ प्राप्त करता है?

CCSpriteBatchNode 
    ChildA1 
     ChildB1 
     ChildB2 
     .... 
     ChildB999 
    ChildA2 
    ChildA3 
    ... 

कहाँ सभी बच्चों (ChildA1, ChildB1, ChildA2 ...) CCSprite वस्तुओं रहे हैं।

[CCSprite spriteWithSpriteFrameName:@"FileName.png"]; 

ChildA1 इस तरह बनाई गई है: CCSpriteBatchNode और सभी बच्चों लेकिन ChildA1 के माध्यम से बनाई गई है

// Create Parent Sprite 
CCSprite* childA1 = [[CCSprite alloc] init]; 
childA1.contentSize = CGSizeMake(37.5,37.5); 
childA1.anchorPoint = ccp(0,0); 
[batchNode addChild:childA1 z:0 tag:1]; 

// Add Child Sprites 
[childA1 addChild:childB1 z:0 tag:1]; 
[childA1 addChild:childB2 z:0 tag:1]; 
[childA1 addChild:childB3 z:0 tag:1]; 
// Continue adding childB4-childB999 

नोट: यह ठीक renders, और मैं उत्पादन मैं उम्मीद है, जहां childB1 के देख स्थिति childA1 से संबंधित है, और childA1childB1 चलती है।

मेरा प्रश्न यह है: क्या मुझे childB1 - childB999 प्रत्येक ड्राइंग में प्रदर्शन लाभ दिखाई देगा? जो मैं समझता हूं, CCSpriteBatchNode अपने सभी बच्चे CCSprites को एक साथ खींचकर CCSpriteBatchNode के भीतर सभी बच्चों के चित्र को अनुकूलित करता है। क्या यह उन CCSprites के बच्चों पर भी लागू होता है?

जो लोग चाहते हैं के लिए पता करने के लिए कारण है कि मैं यह कर रहा हूँ: कई परतें इस खेल के भीतर कर रहे हैं और एक CCSpriteBatchNode के भीतर एक CCSprite के अंदर CCSprites समूहीकरण मुझे ही नहीं की मूल जोड़ तोड़ द्वारा CCSprites के एक समूह में हेरफेर करने की अनुमति देता है sprites का समूह।

+3

AFAIK, हाँ। यदि आप कोकोस 2.0 या उच्चतर का उपयोग कर रहे हैं, तो ड्रॉ आंकड़े की संख्या की जांच करें, कुछ बच्चों को जोड़ें, इसे बढ़ाना नहीं चाहिए: यानी बैच नोड प्रति बनावट में एक एकल ड्रॉ कॉल का उपभोग करता है (जैसा कि 'प्रति स्प्राइट जोड़ा गया' के रूप में विरोध किया जाता है)। पता नहीं है कि क्या आप एआरसीइंग कर रहे हैं, लेकिन यदि आप नहीं हैं तो आप संभवतः बच्चे ए 1 को लिखे हुए हैं (कि कन्स्ट्रक्टर एक ऑटोरेलेज्ड ऑब्जेक्ट नहीं लौटाता है)। – YvesLeBorg

+0

मैं YvesLeBrog से सहमत हूं .. यदि आप कोकोस 2 डी के लिए बनावट मेमोरी के बारे में बात करते हैं, तो इसकी प्रति छवि या बनावट लोड होती है। एक बार जब बनावट को स्मृति में लोड किया जाता है, न तो यह स्मृति को ले जाता है और न ही इसे फिर से लोड करने का समय होता है जिसके परिणामस्वरूप गेम के प्रदर्शन में सुधार होता है। आपके द्वारा उपयोग किए जाने वाले मेमोरी के बारे में, मुझे नहीं लगता कि यह आदर्श तरीका है क्योंकि सीसीएसप्रेट उदाहरण अपने वर्ग में स्वतः ही हैं। तो हमें उनकी स्मृति खपत के बारे में चिंता करने की ज़रूरत नहीं है। –

उत्तर

2

संक्षिप्त उत्तर है, हाँ, CCSpriteBatchNode सभी अप्रत्यक्ष वंशजों सहित सभी बाल नोड्स के लिए एक ड्रॉ कॉल करेगा।

हालांकि, यह नियमित CCSprites का उपयोग करने से बेहतर प्रदर्शन करता है या नहीं, इस पर निर्भर करता है कि आप कितनी बार sprites को संशोधित कर रहे हैं। जब आप CCSpriteBatchNode का उपयोग करते हैं, हर बार जब आप स्प्राइट को संशोधित करते हैं, तो उसे उस स्प्राइट के लिए बनावट एटलस क्वाड निर्देशांक और उसके सभी बच्चों को GPU की बजाय CPU का उपयोग करके पुन: गणना करने की आवश्यकता होगी। आपके उदाहरण के लिए, यदि आप ChildA1 की स्थिति को स्थानांतरित करते हैं, तो ChildB1 से ChildB999 के निर्देशांक अगले फ्रेम को प्रस्तुत करने से पहले पुन: गणना किए जाएंगे। अधिकांश अनुप्रयोगों में, ओपनजीएल ड्रॉ में कमी से अतिरिक्त गणना की लागत कम होती है, क्योंकि ड्रॉ कॉल अपेक्षाकृत महंगे होते हैं, लेकिन आखिरकार यह आपके आवेदन पर निर्भर करेगा और यह स्प्राइट्स का उपयोग कैसे करेगा - इसलिए मैं वास्तविक माप लेने का सुझाव दूंगा आपका आवेदन अगर यह एक प्रदर्शन बाधा है।

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