2012-03-05 9 views
1

そのようなので、私は1つのビューにUIImage(Cocos2dゲームのスクリーンショット)を作成しています:このUIImageは、それが参照するファイルが変更された場合でも、なぜ更新されませんか?

[UIImagePNGRepresentation(screenshot) writeToFile:savePath options:NSDataWritingAtomic error:&error]; 

その後、別の画面上で、私はそうのようなCocos2dメニュー内のすべてのスクリーンショットを表示

-(void) showGardens{ 

    CCMenu* menu = [[CCMenu alloc] initWithItems:nil vaList:nil]; 
    menu_items = [NSMutableArray arrayWithCapacity:gardens.count]; 
    for(Garden* garden in gardens){ 
     NSLog(@"Making menu item for garden %@", garden.name); 
     NSString *loadPath = [NSHomeDirectory() stringByAppendingPathComponent:garden.screen_shot_name]; 
     CCMenuItem* save_button; 
     NSFileManager* fileManager = [NSFileManager defaultManager]; 
     if([fileManager fileExistsAtPath:loadPath]){ 
      save_button = [CCMenuItemImage itemFromNormalImage:loadPath 
                  selectedImage:loadPath target:self selector: @selector(loadGarden:)]; 
     }else{ 
      save_button = [CCMenuItemImage itemFromNormalImage:@"default_screenshot.png" 
                  selectedImage:loadPath target:self selector: @selector(loadGarden:)]; 
     } 


     [save_button autorelease]; 
     CCLabelTTF *label = [CCLabelTTF labelWithString:garden.name fontName:@"Marker Felt" fontSize:100]; 

     // position the label on the center of the screen 
     label.position = ccp(300,555); 
     ccColor3B color = {0,0,0}; 
     [label setColor: color]; 
     [save_button addChild: label];  
     save_button.scale = 0.35; 
     [menu_items addObject: save_button]; 

    } 
    //make sure its not just overwriting one child.  
    for(CCMenuItem* menu_item in menu_items){ 
     [menu addChild: menu_item]; 
     [menu_items retain]; 
    } 
    [menu alignItemsHorizontallyWithPadding:80.0]; 
    menu.position = ccp(700,500); 
    [self addChild: menu]; 

} 

しかし、スクリーンショットが後で置き換えられると、このビューでは、このビューがロードされるたびに[self showGardens]を呼び出すように指定することはできますが、このビューでは更新されません。私がアプリから完全に出て(そして強制終了しても何でも)、それを再び開くと、スクリーンショットは正しいです。

メモリに問題がありますか?または、アプリケーションが実行中に何らかの形ですべてのイメージをキャッシュし、完了したときにのみリロードしますか?

画像のような場所に格納されている:

の/ var /モバイル/アプリケーション/ 77DE5CC9-93DE-4346-A8AE-89F38036F718 /ドキュメント/サンプル Garden17.png

+0

あなたの画像はCocos2Dによってキャッシュされることはありますか? [[CCTextureCache sharedTextureCache] removeAllTextures]を使用しますか?何か影響はありますか? – ggfela

答えて

1

ためcocos2dテクスチャをロードするときにテクスチャをキャッシュします。ファイルをリロードする前に、キャッシュからテクスチャを削除する必要があります。

[[CCTextureCache sharedTextureCache] removeTextureForKey:loadPath]; 
save_button = [CCMenuItemImage itemFromNormalImage:loadPath 
            selectedImage:loadPath 
              target:self 
              selector:@selector(loadGarden:)]; 
+0

私はすべてのUIImageが技術的に "テクスチャ"であることを気付かなかった、ありがとう! – Jenny

関連する問題