好的,我已经在这几个小时了,我真的很困惑。我的Background类代码如下:
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)
}
}
我现在还有以下atlas文件指向其中的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,因为我没有把它包含在我的项目中,我只是想我给你全面的图片。
我已将调查减少到
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型号(特别是iphone 5和6,它们是在@ 2x声明的)。我是否正确地说,如果我将它们全部组合在一起,将加载设备的相关PNG文件?
如果没有,我决定将PNG分成他们自己的设备图册,并编写一些代码来区分和加载正确的图集。
答案 0 :(得分:1)
创建一个folder.atlas,然后将所有图像添加到该文件夹中,请务必使用正确的命名约定,例如
rocky~ipad.png
rocky@2x~ipad.png
rocky@2x~iphone.png
drago~ipad.png
drago@2x~ipad.png
drago@2x~iphone.png
然后,将该folder.atlas添加到您的项目中,并执行xcode构建。
在xcode的products文件夹中搜索.app包,右键单击选择show in finder,然后右键单击该包并选择显示包的内容,在那里你会找到folder.atlasc和inside {{ 1}},folder.1~ipad.png
和folder.1@2x~ipad.png
,每个地图集都有相应的大小,一个.plist文件带有对它们的引用。
另请注意" .1"在atlas文件中是计算地图集,因为当图像大于atlas允许的大小时,xcode将制作更多的地图集并按照惯例计算它们。
担心不是为了更大。
如果需要,请检查此link
folder.1@2x~iphone.png