我正在使用CCScrollLayer。我正在尝试在开始关卡之前在舞台选择屏幕上准备关卡的纹理。 因此,我将此屏幕设置为当我更改级别时,然后在准备的级别纹理之前应该被删除。但我不认为“removeSpriteFramesFromFile”方法效果很好。因为当我滚动几个图层时,它会突然调用“内存警告”并在那个晚些时候删除那些纹理然后我预期。
-(void) prepareTexture:(NSNumber*)number
{
int _page = [number intValue];
if(loadingTexNum != 0 && (_page + 1) != loadingTexNum)
{
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:[NSString stringWithFormat:@"L%d.plist", loadingTexNum]];
loadingTexNum = _page + 1;
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:[NSString stringWithFormat:@"L%d.plist", loadingTexNum]];
}
if(loadingTexNum == 0 && (_page + 1) != loadingTexNum)
{
loadingTexNum = _page + 1;
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:[NSString stringWithFormat:@"L%d.plist", loadingTexNum]];
}
}
由于
答案 0 :(得分:2)
我相信你误解了那种方法的作用:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:@"file.plist"];
它在plist中加载精灵帧,然后从缓存中删除该plist中的CCSpriteFrame对象 - 如果它们被缓存。它不会删除纹理,只删除CCSpriteFrame对象!
要从缓存中删除纹理,您需要调用:
[[CCTextureCache sharedTextureCache] removeTexture:tex];
您应该知道CCSpriteFrame对象是一个相对轻量级的对象,最多消耗64字节的内存。这与使用20位字节内存的16位色深的非常小的32x32纹理相比毫无意义。