【发布时间】:2014-09-12 23:57:59
【问题描述】:
好的,我已经做了好几个小时了,我真的很困惑。我的背景类代码如下:
class Background : SKNode {
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init() {
super.init()
buildBackground()
}
func buildBackground() {
var sprite : SKSpriteNode = SKSpriteNode(imageNamed: "background_full")
sprite.anchorPoint = CGPointZero
self.addChild(sprite)
}
}
我现在还有以下图集文件,它们指向其中的 png 文件
background@2x~iphone.atlas --> background.png, background-567h.png, background-667h.png
background@3x~iphone.atlas --> background.png
background~ipad.atlas --> background.png
background@2x~ipad.atlas --> background.png
我得到不可预测的、不合理的、随机的结果,在 iOS 7 上可能无法找到适用于 iPhone 4s 的图像,但在 iOS 8 上却完全没问题(但使用了适用于 iPhone 5 的图像)。而 iPhone 5 将使用 iPad @1x 等的纹理。
我最初关注的是 the solution for this post 但我就是不明白出了什么问题。
注意:@3x 给了我一个错误,但我明白为什么,文件太大而无法包含在图集中,我打算在我掌握了基础知识后划分背景。所以你可以忽略@3x,因为我没有将它包含在我的项目中,我只是想我给你完整的图片。
编辑 - 注意我在 iOS 7.03、7.1 和 8.0 上进行测试
我已将调查减少到
background.atlas --> background.png (iPad 2)
background@2x.atlas --> background.png (iPhone 4s)
iPad 2 显示正确的结果,但它的纹理正在用于 iPhone 4s。
如果,我有这样的设置:
background@2x~iphone.atlas --> background.png (iPhone 4s)
background~ipad.atlas --> background.png (iPad 2)
iPhone 4s 显示正确的结果,但是,它的纹理被用于 iPad 2 和这两种设备我在 iOS 8.0 中收到错误,显示模拟器设备中的应用程序路径说“SKTexture 无法加载图像资源” .../background@2x~iphone.atlasc/background@2x~iphone.1.png" '
对于以上两个,貌似图集里面的贴图是默认使用的呢
如果,我有这样的设置:
background.atlas --> background~ipad.png (iPad 2)
background@2x.atlas --> background@2x~iphone.png (iPhone 4s)
然后一切正常,除了在 iOS 7.03 中我收到一条错误消息“SKTexture 无法加载图像资源“background.png””,就是这样,不像前面的例子那样长路径
另一个编辑
bottom of this page 的最后一个要点告诉我,如果我将所有设备中的所有背景 PNG 文件集中到一个图集中,SpriteKit 将分离到适当的设备中,因此正确的纹理将加载到内存中。但是,那么我将不得不区分所有 iPhone 型号(特别是在@2x 声明的 iphone 5 和 6)。我是否正确地说,如果我将设备的相关 PNG 文件捆绑在一起,它们将被加载?
如果没有,我决定将 PNG 分离到它们自己的设备图集中,并编写一些代码来区分和加载正确的图集。
【问题讨论】:
-
不可预测的结果?在重试之前做一个产品 - >从设备/模拟器中清理并删除应用程序。 Xcode 不会从已部署的包中删除现有文件,这可能会导致一台设备能够加载一种纹理,而另一台设备不能或退回到不同的纹理。
-
我确保在每次运行时都清理并删除该应用程序。我还对原始帖子添加了编辑。我会再调查一下。在为不同设备命名图集时,是否有默认或推荐的格式?我在 Apple 上找不到任何内容。
标签: ios swift textures sprite-kit