2011-10-31 270 views
0

我正在使用CCScrollLayer。并且我正试图在级别开始之前的阶段选择屏幕上准备一个关卡的纹理。 因此,当我改变关卡时,我制作了这个屏幕,然后在准备好关卡的纹理之前应该将其移除。但我不认为“removeSpriteFramesFromFile”方法很好。因为当我滚动几层时,它会突然调用“内存警告”,并在那么晚的时候删除那些纹理,然后我就预料到了。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

这是第一个'如果'肯定叫? –

+0

肯定是:) –

回答

2

我相信你误解是什么方法做:

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

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

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

[[CCTextureCache sharedTextureCache] removeTexture:tex]; 

你应该知道,一个CCSpriteFrame对象是重量相对较轻的对象消耗的内存最多64个字节。与甚至是具有16位颜色深度的非常小的32x32纹理(使用2048字节内存)相比,这并不算什么。

+0

谢谢你的帮助。好的,我查看了cocos2d的代码。你是对的。 “CCTexture2D * texture = [[CCTextureCache sharedTextureCache] addImage:texturePath];”在addSpriteFramesWithFile方法中调用。那么我应该弄清楚如何去除我想要去除的特定纹理。谢谢 –