removeSpriteFramesFromFile似乎不起作用

时间:2011-10-31 19:22:28

标签: iphone cocos2d-iphone

我正在使用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]];
    }
}

由于

1 个答案:

答案 0 :(得分:2)

我相信你误解了那种方法的作用:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:@"file.plist"];

它在plist中加载精灵帧,然后从缓存中删除该plist中的CCSpriteFrame对象 - 如果它们被缓存。它不会删除纹理,只删除CCSpriteFrame对象!

要从缓存中删除纹理,您需要调用:

 [[CCTextureCache sharedTextureCache] removeTexture:tex];

您应该知道CCSpriteFrame对象是一个相对轻量级的对象,最多消耗64字节的内存。这与使用20位字节内存的16位色深的非常小的32x32纹理相比毫无意义。