如何为Sprite-Kit组织纹理集?

3

好的,我已经花了几个小时在这个问题上了,但是我还是很困惑。下面是 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)
    }

}

我现在拥有的是指向其中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上可能找不到iPhone4s,但在iOS 8上完全正常(但使用的是iPhone5的图像)。而iPhone 5将使用iPad @1x的纹理等。 我最初遵循此帖子的解决方案,但我不明白出了什么问题。 注意:@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 couldn't load image resource "background.png"”之外,一切正常。与先前的示例不同,此处没有长路径。

另一个编辑

此页面底部的最后一个项目向我揭示了一个消息,即如果我将所有设备的背景PNG文件捆绑成一个图集,SpriteKit将会分开适当的设备,因此正确的纹理将被加载到内存中。但是,然后我必须区分所有iPhone型号(特别是声明为@2x的iphone 5和6)。如果我把它们都放在一起,是不是说会加载相应设备的PNG文件?

如果不是,我决定将PNG文件分成各自的设备图集,并编写一些代码来区分并加载正确的图集。


1
不可预测的结果?在再次尝试之前,进行产品->清理并从设备/模拟器中删除应用程序。Xcode不会从已部署的捆绑包中删除已经存在的文件,这可能导致一个设备能够加载一个纹理,而另一个设备则无法加载或回退到不同的纹理。 - CodeSmile
我已经确保在每次运行时清理并删除了应用程序。我还在原帖中添加了一个编辑。我会再仔细研究一下。在为不同设备命名图集时,是否有默认或推荐的格式要遵循?我在苹果官方文档中没有找到相关信息。 - Leo Mowry
1个回答

1
创建一个名为“atlas”的文件夹,然后将所有图像添加到该文件夹中,确保使用正确的命名约定,例如:
rocky~ipad.png
rocky@2x~ipad.png
rocky@2x~iphone.png
drago~ipad.png
drago@2x~ipad.png
drago@2x~iphone.png

然后,将该文件夹.atlas添加到您的项目中,并进行xcode构建。

在xcode的产品文件夹中搜索.app包,并使用右键单击选择在finder中显示,然后右键单击包并选择显示包内容,在那里您将找到文件夹.atlasc和内部的folder.1~ipad.pngfolder.1@2x~ipad.pngfolder.1@2x~iphone.png,每个图集都有相应的大小和一个.plist文件与它们的引用。

还请注意,图集文件中的“.1”是用于计算图集的,因为当图像大于图集允许的大小时,xcode会制作更多的图集并使用这种约定计数。

不要担心图片过大。

如有需要,请查看此link

thanks.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接