我最近正在使用SpriteKit
进行游戏,并发现了一个有趣的问题。当我从Images.xcassets中保存的图像启动SKSpriteNode
时,它在某些iOS 9
模拟器中无法正常工作。我使用的代码是:
let tortoise = `SKSpriteNode`(imageNamed: "tortoise")
在模拟器中进行测试时,我发现虽然它在大多数iOS 8.4和iOS 9模拟器中都有效,但它在iPad 2(iOS 9)和iPhone 4s(iOS 9)中都不起作用。 {2}模拟器中未显示SKSpriteNode
,SKSpriteNode
大小为(0.0,0.0)。即使我使用相同的图片源手动设置其SKTexture
,我发现SKTexture
已加载良好(因为它报告了正确的尺寸),但SKSpriteNode
无法显示图像。
有趣的是,当我在iPad 2(iOS 8.4)和iPhone 4s(iOS 8.4)模拟器中测试相同的上述代码时,它运行良好。所以我不得不直接在主包下导入一些iPhone 4s和iPad 2的图像(不在图像资产中),并使用下面的代码来解决这个问题:
if tortoise.size == CGSize(width: 0.0, height: 0.0) {
print("Reload tortoise image for SKSpiteNode")
tortoise = (isPad == true) ? SKSpriteNode(imageNamed: "tortoisePad.png") : SKSpriteNode(imageNamed: "tortoise@2x.png")
}
通过这种方式,可以在iPad 2(iOS 9)和iPhone 4s(iOS 9)模拟器中正确显示SKSpriteNode
。由于我手头没有iPad 2或iPhone 4s设备,我无法在真机上测试它。我只是想知道这是一个模拟器错误还是旧设备(如iPad 2和iPhone 4s)的iOS 9更改?