问题很简单,就像这个帖子的提示一样
生成具有相同名称但内容不同的新图像文件
我确定文件是从头开始生成的(用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
}
}
答案 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,未经测试,但应该有效。