如何确定SKTexture是否为占位符图像

时间:2014-04-05 01:30:46

标签: ios objective-c sprite-kit

在SpriteKit中,如果使用[SKTexture textureWithImageNamed:]方法加载图像,它将首先搜索您的包,然后搜索地图集,如果找不到您的纹理,它将创建一个占位符图像并加载它。

有没有办法找出(没有目测检查)加载的图像是否是占位符?

这似乎不是处理此类错误的非常“可可”方式。

developer.apple.com现在已经关闭了,所以我想我会向SO提出这个问题。

2 个答案:

答案 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