Major Bug,在XCAssets 文件夹中创建的Sprite Atlas 不支持批量渲染

Major Bug, Sprite Atlas created in XCAssets Folder does not support batch rendering

我开始使用 XCAssets 文件夹中的新 Sprite Atlas,而不是将我的地图集放在项目文件夹中。但是我注意到,当我这样做时,我的节点不再被批量渲染,这导致了大量低效的绘制调用。这完全违背了使用图集的目的!

要清楚这是我用来获取地图集的代码。

let atlas = SKTextureAtlas(named: "Sprites")

"Sprites" 是在 XCAssets 文件夹中创建的精灵图集。

有没有人有解决方法,或者我是否一直在项目文件夹中制作 Sprite Kit Atlases。

我正在使用 Xcode 7.2 测试版。

我之所以要使用新的 Sprite Kit Atlases 是因为 问题。

我在输入问题时找到了一种解决方法。您可以从 XCAssets 文件夹中的图像以编程方式创建 SKTextureAtlas,如下所示:

let atlas = SKTextureAtlas(dictionary: ["Head":UIImage(named: "Head")!, "Body":UIImage(named: "Body")!])

这显然只是一种解决方法。希望 Apple 在更高版本的 Sprite Kit 中修复此问题。这是一个非常严重的性能错误,所有开发人员都应该知道。甚至 Apple 的示例项目也使用了新的 Sprite Atlases,因此您认为它们可以进行批量渲染。

更新 1 Apple 的回应:

Thanks for letting us know about this issue. We are currently investigating the cause, and will be incorporating a fix in future iOS updates. In the mean time, there are two workarounds you can apply: 1. Create and use texture atlas in a .atlas folder. 2. Continuing using texture atlas in the asset catalog, but with deployment target set to iOS 8.0.

更新 2 Apple 表示可能已在 iOS 10 中修复。将进行调查。

这似乎已在 iOS10 中修复。唯一令人讨厌的是,即使它们位于不同的地图集中,您也不能拥有两个同名的图像。

编辑:这仅在 iOS 10 中修复。如果您在 iOS 9 中是 运行,则会出现大量内存泄漏,这将使应用程序崩溃。