3

我的游戏中有很多角色,因此我有很多纹理。当加载纹理图集(包含大约 5 个不同的图像纹理)时,它会增加内存使用并将其保持在该数量。所以更多的纹理只会不断增加这个数字,直到有时应用程序崩溃。我不需要一次所有的角色,我怎么能在我需要的时候加载一些角色纹理并在我不需要的时候释放其他的,但是我需要能够把它带回来。

4

1 回答 1

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 工作更有效。

于 2016-06-15T22:31:57.200 回答