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

Ori*_*ist 3 memory-management sprite-kit sktextureatlas sktexture swift

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

Luc*_*tti 5

规则1

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

let sprite = SKSpriteNode(imageNamed: "Dog")
Run Code Online (Sandbox Code Playgroud)

SpriteKit会查找一个名为的图像Dog,如果找不到,那么它会自动在所有纹理图集中查找图像.

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

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

规则2

不要费心去除内存中的纹理图集

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

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

你能做什么?

您应该根据游戏逻辑将纹理分组为几个纹理图集.

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

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

这将使SpriteKit更有效.