0

问题很简单,就像这个线程的提示一样。
生成具有相同名称但内容不同的新图像文件。
我确定该文件是从头开始生成的。(使用 iexplorer 检查并可以看到
生成了具有新内容的新图像)但是 CCsprite 以某种方式加载了第一个生成的同名文件。
不确定 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
  }
}
4

2 回答 2

0

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

于 2013-09-21T19:01:32.077 回答
0

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

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

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

同上。cocos2d 2.0,未经测试,但应该可以工作。

于 2013-09-21T19:01:42.123 回答