Может ли SKTextureAtlas загрузить пакет из моего пакета вместо основного пакета?

Я работаю над заставкой SWIFT3/SpriteKit, и у меня работала заставка, за исключением того, что я не могу загрузить свою текстуру, потому что, когда я делаю следующее:

// load texture atlas
let textureAtlas = SKTextureAtlas(named: "Flyers")

SKTextureAtlas ищет «флаеры» в основном пакете, который при работе внутри screensaverengine.app не является пакетом, в котором находятся текстуры.

В моей старой заставке на основе obj-c мне пришлось сделать следующее, чтобы загрузить изображения из пакета:

thisBundle = [NSBundle bundleForClass:[self class]];
fileName=[[NSString alloc ] initWithFormat:@"flyer%d", flyNum];
picturePath = [thisBundle pathForResource:fileName ofType:@"png"];
flyerImage= [[NSImage alloc ] initWithContentsOfFile:picturePath];

Прежде чем перейти к загрузке изображений и созданию текстур во время выполнения, я хотел обратиться за помощью к семейству Stackoverflow... мысли?


person Mavro    schedule 15.12.2016    source источник


Ответы (1)


Я никогда не использовал SpriteKit.

Но, глядя на документацию, начиная с iOS 8, вы можете использовать UIImage(named: imageName, in: bundle, compatibleWith: nil) для получения изображений из любого пакета, а затем легко создать свой атлас со словарем этих изображений:

let bundle = Bundle(for: type(of: self))
var dictionary = [String:Any]()
["textureName": "imageName"].forEach { textureName, imageName in
    dictionary[textureName] = UIImage(named: imageName, in: bundle, compatibleWith: nil)
}
let atlas = SKTextureAtlas(dictionary: dictionary)
person Cœur    schedule 16.12.2016