Swift:如何处理内存中的大量纹理

时间:2016-06-15 02:18:54

标签: swift memory-management sprite-kit sktexture sktextureatlas

我的游戏中有很多角色,因此我有很多纹理。当加载纹理图集(包含大约5种不同的图像纹理)时,它会增加内存使用并将其保持在该数量。因此,越多的纹理就会持续驱动该数字,直到应用程序崩溃为止。我不需要同时使用所有角色,我可以在需要时加载一些角色纹理,并在不需要时释放其他角色,但是需要能够将其恢复原状。

1 个答案:

答案 0 :(得分:5)

规则1

首先,您不需要在内存中手动加载纹理图集。 使用此代码创建精灵时

let sprite = SKSpriteNode(imageNamed: "Dog")

SpriteKit会查找名为Dog的图像,如果找不到,则会自动在所有纹理图集中查找图像。

当在纹理图集中找到图像时,整个纹理图集会自动加载到内存中。

  

这就是为什么你可以避免手动加载纹理图集。

规则2

不要为从内存中删除纹理图集而烦恼

当您停止使用给定纹理图集内的所有图像时,它会自动从内存中删除。如果系统具有“足够的”内存但最终会发生这种情况,则不会立即发生这种情况。

  

这就是您不需要从内存中手动删除纹理图集的原因

你能做什么?

您应该按照游戏逻辑将纹理分组为几个纹理图集。

如果你有30个纹理并且你知道只有1 ... 10 OR 11 ... 20 OR 21 ... 30将同时使用,那么创建3个纹理地图集如下:

  • TextureAtlas1:1到10的图像
  • TextureAtlas2:11到20的图像
  • TextureAtlas3:21到30的图像

这将使SpriteKit更有效。