如何组织Sprite-Kit的纹理图集

时间:2014-09-12 23:58:00

标签: ios swift textures sprite-kit

好的,我已经在这几个小时了,我真的很困惑。我的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,因为我没有把它包含在我的项目中,我只是想我给你全面的图片。

编辑 - 注意我正在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型号(特别是iphone 5和6,它们是在@ 2x声明的)。我是否正确地说,如果我将它们全部组合在一起,将加载设备的相关PNG文件?

如果没有,我决定将PNG分成他们自己的设备图册,并编写一些代码来区分和加载正确的图集。

1 个答案:

答案 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.pngfolder.1@2x~ipad.png,每个地图集都有相应的大小,一个.plist文件带有对它们的引用。

另请注意" .1"在atlas文件中是计算地图集,因为当图像大于atlas允许的大小时,xcode将制作更多的地图集并按照惯例计算它们。

担心不是为了更大。

如果需要,请检查此link

folder.1@2x~iphone.png