在SpriteKit中,如果使用[SKTexture textureWithImageNamed:]方法加載圖像,它將首先搜索您的包和地圖集,如果它無法找到您的紋理,它會創建一個佔位符圖像並加載它。如何查找SKTexture是否佔位符圖片
如果加載的圖像是佔位符,是否有辦法找出(沒有視覺檢查)?
這似乎不是一個非常「可可」的方式來處理這種類型的錯誤。
developer.apple.com現在已經關閉了,所以我想我會向SO提出這個問題。
在SpriteKit中,如果使用[SKTexture textureWithImageNamed:]方法加載圖像,它將首先搜索您的包和地圖集,如果它無法找到您的紋理,它會創建一個佔位符圖像並加載它。如何查找SKTexture是否佔位符圖片
如果加載的圖像是佔位符,是否有辦法找出(沒有視覺檢查)?
這似乎不是一個非常「可可」的方式來處理這種類型的錯誤。
developer.apple.com現在已經關閉了,所以我想我會向SO提出這個問題。
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
這個問題有點老,但我會接受這個問題。 – Weston
您可以檢查圖集是否包含圖像。我在AtlasHelper創建了以下方法:
+(BOOL) isTextureWithName:(NSString *) name existsInAtlas:(NSString *)atlasName
{
SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:atlasName];
return [atlas.textureNames containsObject:name];
}
是,使用SpriteKit-QuickLook的從GitHub,然後就可以看到紋理的私人增值經銷商。如果紋理是阿特拉斯紋理,則有一個指向原始紋理的伊娃(圖集) – LearnCocos2D
另外,MissingResource.png爲128x128 - 如果您自己不使用任何該尺寸的紋理,則可以比較紋理大小。 – LearnCocos2D
你有沒有找到一個好方法來做到這一點?我正在預加載紋理,並在三十分之一發布中獲取3或4個紋理的錯誤加載圖像資源。如果發生這種情況,我一直在試圖找到任何方式來查找代碼,然後重新加載它們。 – Brad