Что случилось с TextureMgr? - PullRequest
2 голосов
/ 14 января 2011

В cocos2d раньше использовался метод TextureMgr (Async), позволяющий загружать изображения для последующего использования. Теперь, когда я использую TextureMgr, он говорит, что он не объявлен. Это устарело? Я на .99.5. Если он больше не используется, что его заменяет? Есть ли что-нибудь, что может сделать так же, как эта строка?

 [[TextureMgr sharedTextureMgr] addImageAsync:...NSString goes here... target:self selector:@selector(method:)];

Ответы [ 3 ]

2 голосов
/ 14 января 2011

взгляните на CCTextureCache

http://www.cocos2d -iphone.org / апи-исх / 0.99.5 / interface_c_c_texture_cache.html

Может быть, это вы ищете.

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

EDIT: Как я уже сказал, CCTextureCache используется, когда вы создаете анг объект с текстурой, и поэтому, если текстура уже находится в кеше, создание элемента происходит намного быстрее, чем если бы вы сначала загрузили текстуру, а затем создали объект.

Например, если вы пишете такой код:

id sprite = [CCSprite spriteWithFile: @"my-file.png"]

и текстура @ "my-file.png" не находится в кеше, она будет загружена первой, и это займет некоторое время (намного больше, чем просто создание объекта).

Если вы пишете такой код:

id sprite1 = [CCSprite spriteWithFile: @"my-file.png"];
id sprite2 = [CCSprite spriteWithFile: @"my-file.png"];

Тогда sprite1 будет создаваться медленнее, а sprite2 - намного быстрее, потому что текстура уже находится в кеше.

Вы можете вручную добавить текстуру в кеш

[[CCTextureCache sharedTextureCache] addImage: @"my-file.png"];

и создание всех объектов с этой текстурой будет быстрым.

Общее место в коде, когда вам приходится предварительно кэшировать текстуры, это загрузка игры или загрузка пакета уровня или загрузка уровня.

Также Вы можете предварительно кэшировать звуки, если вам нужно их использовать SimpleAudioEngine singleton

1 голос
/ 18 января 2011

Эндрю в значительной степени ответил на ваш вопрос, я просто хочу дать вам фрагмент кода о том, как использовать CCTextureCache и CCSpriteFrameCache. Кэш текстуры загружает реальные текстуры / изображения, а кэш спрайтовых кадров загружает информацию о текстурах (если вы загружаете лист Sprite). Хорошо, вот пример кода.

Здесь latestBurp1-1.pvr.ccz и burpParticles1-1.png являются моими спрайт-листами, и их информация содержится в (том же имени) .plist файлах.

В функции ниже я загружаю текстуры, а также spriteFrames (информация о текстурах).

Также взгляните на файлы pvr и pvr.ccz, они загружаются намного быстрее, чем png.

-(void) loadBurpAnimation {
        NSString* burpFile;
        NSString* burpFilePVR;

        NSString* burpParticlesFile;
        NSString* burpParticlesFilePVR;

        burpFile = @"latestBurp1-1.plist";
        burpFilePVR = @"latestBurp1-1.pvr.ccz";
        burpParticlesFile = @"burpParticles1-1.plist";
        burpParticlesFilePVR = @"burpParticles1-1.png";

        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:burpFile texture:[[CCTextureCache sharedTextureCache] addImage:burpFilePVR]];
        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:burpParticlesFile texture:[[CCTextureCache sharedTextureCache] addImage:burpParticlesFilePVR]];

        NSMutableArray *burpFrames = [NSMutableArray array];
        for(int i = 231; i <= 268; ++i) {
            [burpFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"burp.%d.png", i]]];
        }
        burpAnim = [[CCAnimation alloc] initWithFrames:burpFrames delay:0.04f];
        [burpFrames removeAllObjects];

        //Burp Particles
        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:burpParticlesFile];
        NSMutableArray *burpParticlesFrames = [NSMutableArray array];
        for(int i = 3; i <= 37; ++i) {
            [burpParticlesFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"Burp_%05d.png", i]]];
        }

        burpParticlesAnim = [[CCAnimation alloc] initWithFrames:burpParticlesFrames delay:0.04f];
        [burpParticlesFrames removeAllObjects];
}

Я только что дал вам много информации, поэтому вам, возможно, придется поискать некоторые термины в Google.

0 голосов
/ 14 января 2011

Я думаю, что вы ищете [CCSpriteFrameCache sharedSpriteFrameCache]

http://www.cocos2d -iphone.org / апи-исх / 0.99.5 / interface_c_c_sprite_frame_cache.html

...