Swift : 如何处理内存中的大量纹理
Swift : How to handle a lot of textures in memory
我的游戏中有很多角色,因此我有很多纹理。当加载纹理图集(包含大约 5 个不同的图像纹理)时,它会增加内存使用并将其保持在该数量。因此,更多的纹理只会使该数字不断上升,直到有时应用程序崩溃。我不需要一次所有的角色,我怎么可能在我需要的时候加载一些角色纹理,在我不需要的时候释放其他的,但我需要能够把它带回来。
规则 1
首先,您不需要手动将纹理图集加载到内存中。
当您使用此代码创建精灵时
let sprite = SKSpriteNode(imageNamed: "Dog")
SpriteKit 查找名为 Dog
的图像,如果找不到它,它会自动在所有纹理图集中查找图像。
当在纹理图集内找到图像时,整个纹理图集会自动加载到内存中。
This is why you can avoid manually loading the texture atlas.
规则 2
不要为从内存中删除纹理图集而烦恼
当您停止使用给定纹理图集中的所有图像时,它会自动从内存中删除。如果系统有 "enough" 内存,这不会立即发生,但最终会发生。
This is why you don't need to manually remove a texture atlas from memory
你能做什么?
您应该按照您的游戏逻辑将您的纹理分组到多个纹理图集中。
如果您有 30 个纹理并且您知道只有 1...10 OR 11...20 OR 21...30 将同时使用然后创建 3 个纹理图集如下:
- TextureAtlas1:从 1 到 10 的图像
- TextureAtlas2:图像从 11 到 20
- TextureAtlas3:从 21 到 30 的图像
这将使 SpriteKit 工作更有效。
我的游戏中有很多角色,因此我有很多纹理。当加载纹理图集(包含大约 5 个不同的图像纹理)时,它会增加内存使用并将其保持在该数量。因此,更多的纹理只会使该数字不断上升,直到有时应用程序崩溃。我不需要一次所有的角色,我怎么可能在我需要的时候加载一些角色纹理,在我不需要的时候释放其他的,但我需要能够把它带回来。
规则 1
首先,您不需要手动将纹理图集加载到内存中。 当您使用此代码创建精灵时
let sprite = SKSpriteNode(imageNamed: "Dog")
SpriteKit 查找名为 Dog
的图像,如果找不到它,它会自动在所有纹理图集中查找图像。
当在纹理图集内找到图像时,整个纹理图集会自动加载到内存中。
This is why you can avoid manually loading the texture atlas.
规则 2
不要为从内存中删除纹理图集而烦恼
当您停止使用给定纹理图集中的所有图像时,它会自动从内存中删除。如果系统有 "enough" 内存,这不会立即发生,但最终会发生。
This is why you don't need to manually remove a texture atlas from memory
你能做什么?
您应该按照您的游戏逻辑将您的纹理分组到多个纹理图集中。
如果您有 30 个纹理并且您知道只有 1...10 OR 11...20 OR 21...30 将同时使用然后创建 3 个纹理图集如下:
- TextureAtlas1:从 1 到 10 的图像
- TextureAtlas2:图像从 11 到 20
- TextureAtlas3:从 21 到 30 的图像
这将使 SpriteKit 工作更有效。