2014-04-05 15 views
6

在SpriteKit中,如果使用[SKTexture textureWithImageNamed:]方法加載圖像,它將首先搜索您的包和地圖集,如果它無法找到您的紋理,它會創建一個佔位符圖像並加載它。如何查找SKTexture是否佔位符圖片

如果加載的圖像是佔位符,是否有辦法找出(沒有視覺檢查)?

這似乎不是一個非常「可可」的方式來處理這種類型的錯誤。

developer.apple.com現在已經關閉了,所以我想我會向SO提出這個問題。

+0

是,使用SpriteKit-QuickLook的從GitHub,然後就可以看到紋理的私人增值經銷商。如果紋理是阿特拉斯紋理,則有一個指向原始紋理的伊娃(圖集) – LearnCocos2D

+0

另外,MissingResource.png爲128x128 - 如果您自己不使用任何該尺寸的紋理,則可以比較紋理大小。 – LearnCocos2D

+0

你有沒有找到一個好方法來做到這一點?我正在預加載紋理,並在三十分之一發布中獲取3或4個紋理的錯誤加載圖像資源。如果發生這種情況,我一直在試圖找到任何方式來查找代碼,然後重新加載它們。 – Brad

回答

1

SKTexture有一些私人性質,這將是有幫助的(見例如https://github.com/luisobo/Xcode-RuntimeHeaders/blob/master/SpriteKit/SKTexture.h),但是在斯威夫特和發展的過程中我使用這個:

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

您可以檢查圖集是否包含圖像。我在AtlasHelper創建了以下方法:

+(BOOL) isTextureWithName:(NSString *) name existsInAtlas:(NSString *)atlasName 
{ 
    SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:atlasName]; 
    return [atlas.textureNames containsObject:name]; 
}