在SpriteKit中,如果使用[SKTexture textureWithImageNamed:]方法加载图像,它将首先搜索您的包,然后搜索地图集,如果找不到您的纹理,它将创建一个占位符图像并加载它。
有没有办法找出(没有目测检查)加载的图像是否是占位符?
这似乎不是处理此类错误的非常“可可”方式。
developer.apple.com现在已经关闭了,所以我想我会向SO提出这个问题。
答案 0 :(得分:2)
您可以检查地图集是否包含图片。我在AtlasHelper中创建了以下方法:
+(BOOL) isTextureWithName:(NSString *) name existsInAtlas:(NSString *)atlasName
{
SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:atlasName];
return [atlas.textureNames containsObject:name];
}
答案 1 :(得分:1)
SKTexture有一些有用的私有属性(参见例如https://github.com/luisobo/Xcode-RuntimeHeaders/blob/master/SpriteKit/SKTexture.h),但在Swift和开发过程中我使用的是:
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