3 回答
TA贡献1783条经验 获得超4个赞
每个TextureAtlas是60K
作为文件。但这不是内存使用情况。要计算图像文件的内存使用量,请计算文件的尺寸,然后将它们乘以颜色位深度(通常为32位= 4字节)。
例如,一个4096x4096的纹理使用16 MB的纹理内存(但作为PNG文件,它可能比1 MB小得多)。
4096 x 4096 x (32/8) = 16 Megabytes
长话短说:使用Instruments来验证您的应用程序的实际内存消耗。
TA贡献1801条经验 获得超15个赞
基于SpriteKit的游戏内存不足的问题几乎总是由开发人员使用太多纹理导致的,这些纹理占用了所有活动RAM。我将假设您使用的是基于SKAction的标准动画方法,并且没有因强引用或其他原因引起的任何奇怪的内存泄漏。确定纹理消耗的RAM数量的正确方法是(WIDTH * HEIGHT * 4/1000),这表示存储纹理所需的kB内存数量。对于4096x4096纹理,即67108 kB或大约68 Meg。这是存储在地图集中还是作为单个纹理都没有关系。实际减少SpriteKit游戏使用的内存总量的关键是减少每个纹理消耗的内存量。请查看此源代码SpriteKitFireAnimation示例说明了如何减少非常复杂的alpha通道动画的每帧内存使用量可以从286 Meg降低到130 Meg,该动画在64位iOS系统上以60FPS执行。此方法仅适用于A7和更新的64位系统。如果您正在寻找质量要求不高,但完全免费的方式,看到这种比较非常有损纹理压缩与SpriteKit方法。作为最后的努力,可以将每个纹理的宽度和高度减小1/2,然后在渲染到节点时将纹理向上缩放,虽然效果不佳,但在运行时使用的内存却少了4倍。
添加回答
举报