2014-04-05 7 views
6

स्प्राइटकिट में है, यदि आप [SKTexture textureWithImageNamed:] विधि के साथ एक छवि लोड करते हैं, तो यह पहले आपके बंडलों को खोजेगा, फिर एटलस, अगर यह आपके बनावट को ढूंढने में विफल रहता है, फिर यह प्लेसहोल्डर छवि बनायेगा और इसे लोड करेगा।मैं यह कैसे पता लगा सकता हूं कि एसकेटेक्चर प्लेसहोल्डर छवि

क्या लोड की गई छवि प्लेसहोल्डर है (पता लगाने के बिना) खोजने का कोई तरीका है?

यह इस प्रकार की त्रुटि को संभालने के लिए बहुत "कोको" तरीका जैसा प्रतीत नहीं होता है।

developer.apple.com अब नीचे है, इसलिए मुझे लगा कि मैं इस प्रश्न को SO पर लिखूंगा।

+0

हाँ, उपयोग SpriteKit-quicklook GitHub से है, तो आप बनावट के निजी वार्स देख सकते हैं। एक ivar है जो मूल बनावट (एटलस) को इंगित करता है यदि बनावट एक एटलस बनावट – LearnCocos2D

+0

है, इसके अलावा, MissingResource.png 128x128 है - यदि आप उस आकार के किसी भी बनावट का उपयोग नहीं करते हैं तो आप बनावट आकार की तुलना कर सकते हैं। – LearnCocos2D

+0

क्या आपको कभी ऐसा करने का अच्छा तरीका मिला? मैं बनावट बना रहा हूं और तीस लॉन्च में से एक मुझे 3 या 4 बनावट के लिए त्रुटि लोड हो रहा है। यदि ऐसा होता है तो मैं कोड के साथ पता लगाने का कोई तरीका ढूंढने की कोशिश कर रहा हूं और फिर अगर ऐसा करता है तो उन्हें फिर से लोड करें। – Brad

उत्तर

1

SKTexture कुछ निजी संपत्तियों कि मददगार होगा है, स्विफ्ट में और विकास के दौरान, लेकिन मैं इस का उपयोग कर रहा:: मैं अपने AtlasHelper में बनाए गए निम्न विधि

extension SKTexture { 
    public var isPlaceholderTexture:Bool { 
     if size() != CGSize(width: 128, height: 128) { 
      return false 
     } 

     return String(describing: self).contains("'MissingResource.png'") 
    } 
} 

ध्यान दें!:

यह केवल काम करता है, यदि आप उपयोग कर रहे हैं एक SKTextureAtlas:

let t1 = SKTextureAtlas(named: "MySprites").textureNamed("NonExistingFoo") 
// t1.isPlaceholderTexture == true 

let t2 = SKTexture(imageNamed: "NonExistingBar") 
// t2.isPlaceholderTexture == false 
+0

यह सवाल थोड़ा पुराना है, लेकिन मैं इसे स्वीकार करूंगा। – Weston

2

आप यह जांच सकते हैं कि एटलस में छवि है या नहीं। (देखें उदाहरण के लिए https://github.com/luisobo/Xcode-RuntimeHeaders/blob/master/SpriteKit/SKTexture.h)

+(BOOL) isTextureWithName:(NSString *) name existsInAtlas:(NSString *)atlasName 
{ 
    SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:atlasName]; 
    return [atlas.textureNames containsObject:name]; 
} 
संबंधित मुद्दे