2013-09-21 3 views
0

질문은이 스레드의 끝 부분처럼 간단합니다.
이름은 같지만 내용이 다른 새 이미지 파일 생성.
파일이 처음부터 생성되었는지 확인하십시오 (iexplorer로 확인하면
새 콘텐츠가 생성됨). CCsprite는 동일한 이름의 첫 번째 생성 된 파일을로드합니다.
CCspriteFrame이 캐시하는지 확실하지 않습니다.
purgeSharedSpriteCache 또는 removeUnusedSpriteFrames가 없으면 제거합니다 (있는 경우)
그래서 나에게 무엇을 선호합니까? 새로운 CCSprite를로드하기 전에 캐시에서 텍스처를 제거하는CCSprite에서로드 된 이미지를 캐시하지 않도록 cocos2d에게 알려주는 방법은 무엇입니까?

{ 
    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

먼저 캐시의 질감을 확인 않습니다 사용하고있는 CCSprite의 ctor에. 캐시에서 찾으면 캐시 된 객체와 함께 새로운 ccsprite를 반환합니다. 그렇지 않다면 캐시에 (자동으로) 넣고 ccsprite를 새로 캐시 된 텍스처와 함께 반환합니다.

당신이 캐시

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

산부인과 CIT에서 먼저 질감을 제거 할 수 있습니다 당신에게합니다. cocos2d 2.0은 테스트되지 않았지만 작동해야합니다.

+0

스프라이트를 생성 한 직후 스프라이트의 텍스처를 캐시에서 제거 할 수도 있습니다. [[CCTextureCache sharedTextureCache] removeTexture : firstSprite.texture]; 일단 스프라이트가 할당 해제되면 메모리에 텍스처를 유지하는 것이 없으며 다시로드하면 새로운 텍스처가 캐시에 추가됩니다. – LearnCocos2D