0

質問はこのスレッドのヒントとして簡単です。
同じ名前で内容が異なる新しいイメージファイルを生成します。
ファイルが最初から生成されていることを確認します( ieexplorerで確認すると、
新しいコンテンツを含む新しい画像が生成されていることがわかります)が、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];

ob cit。cocos2d 2.0、テストされていませんが、動作するはずです。

于 2013-09-21T19:01:42.123 に答える