我在游戏中有很多plist,每个级别。 我正在使用它来卸载前一个frameCache,
for(int i=1;i<stage;i++)
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:[NSString stringWithFormat:@"candys%i.plist",i]];
但过了一段时间,似乎游戏变得有点慢了。
sprite = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"candy%i.png",1]];
其中candy1
是缓存中spriteesheet中的sprite并且正在加载
在实时 - 这意味着每秒很多次。
会不好?它是否加载内存以便每秒多次从spriteSheet中获取精灵?我必须预先定义它吗?
答案 0 :(得分:0)
您不想加载/卸载单个精灵帧。精灵框架引用纹理。通常这将是许多不同的精灵帧使用的纹理图集。精灵帧本身可能是16字节的数据。纹理可能高达16兆字节。
因此,除非你删除整个纹理图集和所有相关的精灵帧,否则所有你将获得的性能降低,因为你经常解除分配和加载精灵帧。如果你每秒多次这样做,你就会浪费很多时间来加载/卸载精灵帧。
经验法则:预先加载整个场景,将所有内容保存在内存中,直到场景结束。只有当整个场景不能同时适应内存时,才考虑卸载/重新加载对象和数据。