[[CCTextureCache sharedTextureCache] textureForKey: @ ”myImageName”];вернуть ноль - PullRequest
3 голосов
/ 15 марта 2012

У меня много больших изображений, когда на устройстве не только мое приложение, но и мое приложение создает что-то странное: я использовал

[[CCTextureCache sharedTextureCache] addImage:@"myImageName"];

для загрузки всех изображений. У меня есть несколько спрайтов, которые меняют свою текстуру:

[[CCTextureCache sharedTextureCache] textureForKey:@"myImageName"];

в начале игры все идет хорошо, все изображения отображаются. но чем больше я играю, тем больше спрайтов становятся белыми. sharedTextureCache автоматически удаляет спрайты при предупреждении памяти? в RootViewController я ничего не изменил и выглядит так:

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

почему я не могу найти текстуры?

это проблема cocos2d? или правильный способ сделать это:

CCTexture2d *tex=[[CCTextureCache sharedTextureCache] textureForKey:@"myImageName"];
if(!tex) [[CCTextureCache sharedTextureCache] addImage:@"myImageName"];
[mysprite setTexture:tex]

спасибо

1 Ответ

0 голосов
/ 25 апреля 2012

Существует метод purgeCachedData в CCDirector.m:

-(void) purgeCachedData
{
    [CCLabelBMFont purgeCachedData];
    [[CCTextureCache sharedTextureCache] removeUnusedTextures];
}

и в типичном AppDelegate.m, созданном из шаблона cocos2d, есть:

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    [[CCDirector sharedDirector] purgeCachedData];
}

КакВ результате будет вызвано removeUnusedTextures из CCTextureCache, что исключит все текстуры в кэше, которые сохраняются только самим кэшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...