से हटा वहाँ किसी भी (सबसे अच्छा अभ्यास) वर्ग के भीतर जिस तरह की घटनाओं जब एक SKSpriteNode (या SKNode) पर जोड़ा गया है और एक माता पिता के नोड से निकाल दिया जाता है हुक करने है?SKSpriteNode, को जोड़ा गया/माता-पिता हुक
उत्तर
Kobold Kit सभी केके * नोड कक्षाओं में कॉलबैक विधियों didMoveToParent
और willMoveFromParent
जोड़ता है।
यह सभी एसके * नोड वर्गों को उपclassing और संबंधित addChild
और removeChild
विधियों और उनके रूपों को ओवरराइड करके हासिल किया जाता है। इसके बाद वे नोड को ऊपर या हटाए जाने के आधार पर उपरोक्त श्रेणी विधियों को कॉल करते हैं।
दुर्भाग्य से हम सब SKNode वर्गों के लिए तरीकों जोड़ने के लिए SKNode उपवर्ग नहीं कर सकते हैं - अन्य एसके * नोड अभी भी अपने माता पिता के रूप मूल SKNode होगा सब। सबक्लासिंग के अलावा आप एक एसकेएनओडी श्रेणी में कस्टम ऐड चाइल्ड/निकालें चाइल्ड विधियां भी जोड़ सकते हैं (चलो एडनोड/निकालें नोड) और केवल इन का उपयोग करें। फिर वे मूल addChild/removeChild कार्यान्वयन को कॉल करने से पहले नोड को एक इच्छा जोड़ें/किया गया संदेश भेजेंगे।
सैद्धांतिक रूप से यह भी SKNode वर्ग पर addChild/removeChild तरीकों swizzling के द्वारा किया जा सकता है। लेकिन अगर मुझे सही तरीके से याद आया तो मैंने शुरुआत की कोशिश की, और यह काम नहीं किया - मुझे याद नहीं है कि क्यों, कारणों में से एक कारण यह हो सकता था कि एसकेएनओड के उप-वर्ग सुपर-कॉल किए बिना addChild/removeChild के अपने संस्करणों को कार्यान्वित कर सकते हैं कार्यान्वयन, या सुपर कार्यान्वयन को बुलावा बस swizzled विधियों को नहीं चलाता है। एक अन्य कारण हो सकता है कि आंतरिक रूप से addChild/removeChild तरीकों सीधे बजाय अंतर्निहित सी ++ स्प्राइट किट इंजन को भेजी जाती है SKNode वर्ग पदानुक्रम में ऊपर की तरफ पारित किया जा रहा।
कोबॉल्ड किट की आवश्यकता के बिना, आप एसकेएसप्रेट नोड (या तथ्य के लिए कोई भी एसकेएनओडी) उप-वर्ग कर सकते हैं और एसकेएनओड्स के removeFromParent
फ़ंक्शन का विस्तार कर सकते हैं।
उदाहरण के लिए:
FLSprite.m:
#import "FLSprite.h"
@implementation FLSprite
-(void)removeFromParent {
[super removeFromParent];
NSLog(@"I print when I'm Removed");
//here's where you'll add your hooking functions
}
@end
MyScene.m:
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
FLSprite* sprite = [FLSprite spriteNodeWithColor:[UIColor blackColor] size:CGSizeMake(200, 100)];
[sprite setPosition:CGPointMake(100.0, 50.0)];
[self addChild:sprite];
[sprite removeFromParent];
}
return self;
}
, एक बच्चे को जोड़ने के बाद आप इस तरह के रूप में एक बच्चे को जोड़ने के लिए के रूप में (ज्यादातर मामलों में) [self addChild:node];
आप ध्यान में रखते हुए addChild
का विस्तार करने की आवश्यकता होगी आप एक फिर से जोड़ रहे हैं। उदाहरण के लिए यदि आप अपने MyScene.m
के लिए निम्न जोड़ देंगे क्योंकि हम उस दृश्य का स्प्राइट जोड़ रहे हैं
-(void)addChild:(SKNode *)node {
[super addChild:node];
NSLog(@"added child");
}
यह काफी क्या स्टीफन Itterheim इस कार्यों हासिल करने के लिए, के रूप में वह अपने पोस्टिंग में विस्तार से बताया किया है ।
यहां समस्या शायद कुछ है अन्य प्रकार जैसे insertChild, और माता-पिता के निकालने की तरह चीजें भी बच्चे। उन सभी को पकड़ना मुश्किल हो सकता है। वैसे भी एक इन-गेम पॉज़ पॉपअप लेयर जैसी चीजें कर रही हैं (शायद यह एक स्नोडोड या स्कसप्रिटिनोड है) सही पाने के लिए मुश्किल है। – Jonny
नहीं यदि आप SKNode/SKSpriteNode उपवर्गीकरण कर रहे हैं, यह मुश्किल नहीं होगा। लेकिन tbh, अगर आप addChild के साथ एक हुक पर भरोसा कर रहे हैं, तो आप शायद गलत तरीके से चीजों के बारे में जा रहे हैं। –
- 1. iOS: SKSpriteNode
- 2. तेज परिवर्तन SKSpriteNode छवि
- 3. कस्टम SKSpriteNode स्पर्श के दौरान नहीं पता
- 4. "विंडोज हुक" सिस्टम को कैसे जोड़ा जाए ताकि विंडोज़ को बनाया/सक्रिय किया जा सके?
- 5. हुक
- 6. गिटहब: एंटरप्राइज़ पोस्ट-हुक हुक
- 7. एक गिट पोस्ट-हुक हुक
- 8. अद्यतन हुक
- 9. बुनियादी गिट हुक को समझना
- 10. गिट हुक को कैसे हटाएं
- 11. एक और वैश्विक हुक मेरे वैश्विक हुक
- 12. गिट हुक: क्या क्लोन हुक है?
- 13. बच्चे को जोड़ा गया/संशोधित
- 14. हुक प्रक्रिया
- 15. सबवर्सन हुक
- 16. शटडाउन हुक
- 17. आरएसपीईसी हुक
- 18. एकाधिक प्री-प्रतिबद्ध हुक हैंडल
- 19. precommit हुक
- 20. गिट हुक
- 21. ओएसजीआई बुनाई हुक उदाहरण
- 22. हुक मानक इनो सेटअप चेकबॉक्स
- 23. गिट प्री-प्रतिबद्ध हुक विंडोज़
- 24. हुक करने के लिए हुक या नहीं - गिट
- 25. समर्थन पुस्तकालयों को कैसे जोड़ा जाए?
- 26. ओआरसी फ़ाइल को कैसे जोड़ा जाए
- 27. UITextView पर इलिप्स को कैसे जोड़ा जाए?
- 28. UIViewController में UINavigationBar को कैसे जोड़ा जाए?
- 29. "डिलीट कैस्केड" बाधाओं को कैसे जोड़ा जाए?
- 30. जेएसटीएल को मेवेन में कैसे जोड़ा जाए?
नीचे की रेखा, स्प्राइट किट बड़ी और बड़ी हो सकती है लेकिन इसमें क्या कमी है ओपन सोर्स समुदाय है ... – Jonny
आप आईओएस एसडीके के बारे में भी यही बात कह सकते हैं ... @ जॉनी –