2012-02-20 73 views
0

我有很多plist,在我的游戏 - 每个级别。 我使用这个卸载以前的frameCache,看看什么文件在帧缓存

for(int i=1;i<stage;i++) 
    [[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:[NSString stringWithFormat:@"candys%i.plist",i]]; 

但经过一段时间似乎比赛变得有点慢。

  1. 我也加载实时,像这样的图片:
sprite = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"candy%i.png",1]]; 

其中candy1是在高速缓存中的spritesheet精灵并实时被加载 时间 - 这意味着每秒多次。 它可能是坏的?是否加载内存从spriteSheet多次获取精灵?我必须预先定义它吗?

非常感谢。

+0

任何人都知道它是如何工作的? – Curnelious 2012-02-21 11:41:10

回答

0

你不想加载/卸载单个精灵帧。精灵框架引用一个纹理。通常这将是许多不同的精灵帧使用的纹理地图集。精灵帧本身可能是16字节的数据。纹理可能高达16兆字节。

所以,除非你删除整个纹理地图集和所有关联的精灵帧,否则所有你会得到的是性能下降,因为你经常释放和加载精灵帧。如果你每秒多次这样做,你只是浪费大量时间来加载/卸载精灵帧。

经验法则:预先加载整个场景,将所有内容保存在内存中,直到场景结束。只有当整个场景不能一次装入内存时,才应考虑卸载/重新加载对象和数据。