我用这样一种巨大的纹理加载我的动画角色:
[[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"MyFile.plist"];
后来,当我不再使用该角色时,我使用以下方式释放内存:
[[CCSpriteFrameCache sharedSpriteFrameCache]removeSpriteFramesFromFile:@"MyFile.plist"];
还有:
[[CCTextureCache sharedTextureCache]removeTextureForKey:@"MyFile.png"];
只是为了确定。
我这样做是因为它使用的纹理消耗了大量内存,因此我确保将其丢弃,以便我的应用程序不会崩溃。 以上代码是否正确?
无论如何,这是实际问题:我最终再次加载我的角色,并再次处理它。最终,在一对夫妇复活并杀死之后,应用程序崩溃了。日志没有说明,所以我可以怀疑它是由于记忆 - 这就是为什么我认为我没有正确处理纹理。
我确实需要创建和处理角色的纹理。我不能在游戏中预装它。
答案 0 :(得分:4)
我通常使用蛮力方法如下:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
在游戏流程的特定时刻。在宏伟的计划中,使用coco扫描其阵列并不太昂贵。在你的情况下,在我目前的游戏中,我必须加载和沟渠。 CCTextureCache具有CCLOG,允许您见证删除是否实际发生在您期望或接近它(自动释放有其怪癖)。如果没有,你可能会在某处保留一些纹理句柄,精灵,批处理节点,CCAnimation或动作。
答案 1 :(得分:0)
您是否也尝试了purgeSharedTextureCache
,如下所示:
您也可以在App Delegate方法中看到它在内存警告期间释放纹理。