如何告诉cocos2d不要在CCSprite中缓存加载的图像?

时间:2013-09-21 17:56:55

标签: objective-c caching cocos2d-iphone ccsprite

问题很简单,就像这个帖子的提示一样 生成具有相同名称但内容不同的新图像文件 我确定文件是从头开始生成的(用iexplorer检查,可以看到带有
的新图像 生成了新的内容)但CCcdrite以某种方式加载了第一个生成的同名文件 不确定CCspriteFrame是否会缓存它 purgeSharedSpriteCache或removeUnusedSpriteFrames不会删除它(如果是)
所以你更喜欢我?

{
  NSArray *docs=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *docPath=[docs objectAtIndex:0];
  NSString *fn=[docPath stringByAppendingPathComponent:@"tmp.png"];



  if([[NSFileManager defaultManager]fileExistsAtPath:fn])
  {
    //[CCSpriteFrameCache purgeSharedSpriteFrameCache];
    //[[CCSpriteFrameCache sharedSpriteFrameCache]removeUnusedSpriteFrames];
    //[[CCSpriteFrameCache sharedSpriteFrameCache]removeSpriteFrames];
    CCSprite *firstSprite=[CCSprite spriteWithFile:fn];
    [self regenerateNewTmpPng];//this deletes old tmp.png and generates imagefile with same name but different content
    CCSprite *secondSprite=[CCSprite spriteWithFile:fn];//this loads same content as squareSprite
  }
}

2 个答案:

答案 0 :(得分:0)

尝试在加载新的CCSprite之前从缓存中删除纹理:https://github.com/cocos2d/cocos2d-iphone/blob/develop-v2/cocos2d/CCTextureCache.m#L412

答案 1 :(得分:0)

您正在使用的CCSprite ctor首先检查缓存中的纹理。如果它在缓存中找到它,它将返回带有缓存对象的新ccsprite。如果没有,它将它放入缓存(静默)并返回带有新缓存纹理的ccsprite。

如果您愿意,可以先从缓存中删除纹理

CCSprite *firstSprite=[CCSprite spriteWithFile:fn];
[self regenerateNewTmpPng];
[[CCTextureCache sharedTextureCache] removeTextureWithKey:@"tmp.png"];
CCSprite *secondSprite=[CCSprite spriteWithFile:fn];

ob cit。 cocos2d 2.0,未经测试,但应该有效。