से एक SKTexture बनाएँ क्या कोई SKShapeNode से SKTexture बनाने का कोई तरीका है? आकार नोड्स स्मृति समस्याओं के कारण ज्ञात हैं और मैं उनसे एक स्थिर ग्राफिक बनाने के लिए एक रास्ता तलाश रहा हूं (.png अधिमानतः)।एक SKShapeNode
उत्तर
आप SKView
विधि textureFromNode:
कहा जाता है यहाँ संदर्भ से है का उपयोग कर सकते हैं:
textureFromNode:
रेंडर और एक स्प्राइट किट बनावट उस नोड के सामग्री शामिल है देता है।
- (SKTexture *)textureFromNode:(SKNode *)node
पैरामीटर
नोड
नोड वस्तु सामग्री आप बनावट को प्रस्तुत करना चाहते हैं का प्रतिनिधित्व।
वापसी मूल्य
एक स्प्राइट किट बनावट है कि प्रदान की गई छवि रखती है।
चर्चा प्रस्तुत किए गए नोड को दृश्य के प्रस्तुत दृश्य में प्रकट होने की आवश्यकता नहीं है। नया बनावट नोड की गणना AccumulatedFrame विधि द्वारा लौटा आयत के बराबर आकार के साथ बनाया गया है। यदि नोड दृश्य नोड नहीं है, तो इसे एक स्पष्ट पृष्ठभूमि रंग ([SKColor clearcolor] के साथ प्रस्तुत किया जाता है)। SKShapeNode थोड़ा खोज और वहाँ सत्यापन करने के बाद
UPDATE-- वास्तव में एक रास्ता बताए और फिर नोड को हटाने से संबद्ध एक स्मृति रिसाव मुद्दा था, मैं एक विचार था ...
नहीं सच में एक नया विचार है, और अधिक एक repurposed एक के। यह बहुत अच्छा विचार वास्तव में मुझे मेरे दिल की सामग्री :)
पूलिंग
हाँ करने के लिए SKShapeNodes उपयोग की अनुमति दी ... मैं सिर्फ इतना है कि मैं जरूरत के मुताबिक पुन: उपयोग किया SKShapeNodes का एक पूल बनाया। क्या फर्क पड़ता है :) तो जब भी आवश्यक हो, तो जब भी आवश्यक हो, पथ को फिर से परिभाषित करें, और बाद में आपके साथ फिर से खेलने के लिए इंतजार कर रहे होंगे।
जब भी आप अपने पूल में वापसी का उपयोग करते हैं, तो आप बस पथ को फिर से परिभाषित करते हैं, और बाद में आप फिर से खेलने के लिए प्रतीक्षा करेंगे।
अपने SKScene
में पूल नामक एक ivar या संपत्ति NSMutableArray
बनाएं और इसे SKScene
में डालने पर इसे बनाएं। आप या तो init के दौरान अपने आकृति नोड्स के साथ सरणी को पॉप्युलेट कर सकते हैं, या आप उन्हें आवश्यकतानुसार बना सकते हैं।
-(SKShapeNode *)getShapeNode
{
if (pool.count > 0)
{
SKShapeNode *shape = pool[0];
[pool removeObjectAtIndex:0];
return shape;
}
// if there is not any nodes left in the pool, create a new one to return
SKShapeNode *shape = [SKShapeNode node];
return shape;
}
इसलिए आप जहां भी दृश्य में आप एक SKShapeNode जरूरत है यदि आप ऐसा करते हैं::
SKShapeNode *shape = [self getShapeNode];
// do whatever you need to do with the instance
जब
यह कुछ त्वरित विधि मैं पूल से एक नया नोड हथियाने के लिए बनाया है आप आकृति नोड का उपयोग करके किया जाता है, बस इसे पूल में वापस कर दें और पथ को सेट करें। उदाहरण के लिए:
[pool addObject:shape];
[shape removeFromParent];
shape.path = NULL;
मैं जानता हूँ कि यह एक समाधान है और एक आदर्श समाधान है, लेकिन निश्चित रूप से इस SKShapeNodes की एक बड़ी संख्या का उपयोग करने और स्मृति खून बहाना नहीं चाहते किसी के लिए एक बहुत व्यवहार्य समाधान नहीं है।
अब मैं देर हो चुकी हूं, लेकिन मैं अपने आकार नोड को स्प्राइट नोड में बदलने की कोशिश कर रहा हूं और समस्या यह है कि बनावट नोडफ्रॉमटेक्चर का उपयोग करके क्रेट नहीं की जाती है। मेरे बनावट रिटर्न (शून्य) के एनएसएलओजी, तो मैं इसे बना रहा हूँ के बाद मेरा बनावट खाली है? – MOzeb
- 1. SKShapeNode
- 2. SKAction एक SKShapeNode
- 3. SKShapeNode की अस्पष्टता को एनिमेट कैसे करें?
- 4. SKShapeNode (circleOfRadius) में परिणाम के लिए OSX
- 5. स्प्राइट किट में एक मुखौटा के रूप में एक सर्कल (SKShapeNode) का उपयोग करना संभव है?
- 6. SKShapeNode के लिए 1 से कम लाइनविड्थ कैसे सेट करें?
- 7. क्या स्प्राइटकिट एनिमेटेड के साथ एक रेखा खींचना संभव है?
- 8. SpriteKit के साथ एक आयत में एक छेद ड्रा?
- 9. यदि एक वस्तु वास्तव में एक विशेष प्रकार का है और तेजी से
- 10. स्प्राइट किट पिन जोड़ों में एक गलत एंकर होता है
- 11. अपने केंद्र
- 12. स्विफ्ट
- 13. प्रत्येक चतुर्भुज
- 14. स्प्राइट किट - स्प्रिंग जोड़ों (झटका अवशोषक)
- 15. स्विफ्ट स्प्राइट किट टॉग फंक्शन
- 16. आईओएस स्प्राइट किट
- 17. Spritekit में ग्रेडियेंट कैसे बनाएं?
- 18. एल्गोरिथ्म एक बड़ा एक समस्या एक
- 19. कॉपी एक सीवी :: चटाई एक और एक
- 20. प्रवेश, एक एक-से-एक मेज
- 21. एक समारोह एक घटक
- 22. एक भी एक
- 23. एक संग्रह एक प्रकार
- 24. एक Git एक स्क्रिप्ट
- 25. एक और एक
- 26. एक एक href लिंक
- 27. एक क्यूआर एक टुकड़ा
- 28. क्रमबद्ध एक और एक
- 29. एक बड़ा एक
- 30. एक संपीड़ित एक
जिज्ञासा से, आप SKShapeNodes के साथ किस प्रकार की मेमोरी समस्याएं हैं? – prototypical
यहां इसके बारे में कुछ जानकारी है http://sartak.org/2014/03/skshapenode-you-are-dead-to-me.html मेरे पास मेरे दृश्य (लगभग बोर्ड गेम) में लगभग 80 स्थैतिक गैर-एनिमेटिंग आकार नोड्स हैं और यह तीसरे जीन आईपैड पर लगभग 20 एफपीएस चलाता है। –
20fps पर चलना एक स्मृति समस्या नहीं है, यह एक प्रदर्शन मुद्दा है। मैंने स्मृति के संदर्भ में 'SKShapeNode' की सीमाओं का परीक्षण नहीं किया है, हालांकि ऐसा लगता है कि CGPath असली मुद्दा है। क्या आपने सीजीपाथ के साथ बनाए गए पथ का उपयोग करके 'एसकेशिप नोड' नहीं किया है? आखिरकार, अपने फ्रेमरेट मुद्दे को हल करने का एक और तरीका है 'SKEffectNode' में 'SKShapeNode' को' SKEffectNode 'में लपेटना और 'SKEffectNode' की' mustRasterize' प्रॉपर्टी का उपयोग करना। यदि आपके पास आकृति नोड्स हैं तो यह छवि को 'फ़्लैटन' करेगा और प्रदर्शन में भारी वृद्धि करेगा। – prototypical