【问题标题】:How to organize Texture Atlas for Sprite-Kit如何为 Sprite-Kit 组织纹理图集
【发布时间】: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


【解决方案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 中的 products 文件夹中搜索 .app 包,然后右键单击选择在 finder 中显示,然后右键单击包并选择显示包的内容,在那里你会找到 folder.atlasc 和 @987654323 @ 、folder.1@2x~ipad.pngfolder.1@2x~iphone.png,每个图集都有相应的大小和一个 .plist 文件,其中包含对它们的引用。

还请注意,atlas 文件中的“.1”用于计算图集,因为当图像大于图集允许的大小时,xcode 会制作更多图集并按照该约定进行计数。

不要担心更大。

如果需要,请查看link

thanks.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多