В моей игре я должен изменить фон сцены во время игрового процесса. Когда я устанавливаю новую текстуру для фона, игра на мгновение замедляется. Чтобы избежать этого, я пытаюсь предварительно загрузить текстуру асинхронно, а затем показать ее в основном потоке. Это, как я могу это сделать:Невозможно отобразить текстуру, загруженную асинхронно
NSString *filename = [NSString stringWithFormat:@"res/src/level_%i/background.png", [GameLevel sharedGameLevel].currentLevelIndex + 1];
__block CCTexture2D *texture;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"FILENAME %@", filename);
[[CCTextureCache sharedTextureCache] addImage:filename];
NSLog(@"%@", [CCTextureCache sharedTextureCache]);
dispatch_async(dispatch_get_main_queue(), ^{
texture = [[CCTextureCache sharedTextureCache] textureForKey:filename];
[spareBackground setTexture:texture];
[dayBackground runAction:[CCSequence actions:fadeOut,[CCCallBlockN actionWithBlock:^(CCNode *node)
{
NSLog(@" TEXTURE %@", texture);
[dayBackground setTexture:texture];
CCFadeIn *fadeIn = [[[CCFadeIn alloc] initWithDuration:5] autorelease];
[dayBackground runAction:fadeIn];
}], nil]];
});
});
но вместо фона я всегда получаю пустой экран, несмотря на текстуру была успешно загружена, это не nil
. Этот код отлично работает, если текстура загружается в основной поток без использования gcd. Что мне не хватает?
Все ваши NSLogs до последнего показывают ожидаемые результаты? – sergio
и как насчет 'запасного фонда' против' dayBackground'? Что ты пытаешься сделать? оба назначения производят черную текстуру? – sergio
@sergio все NSLogs показывают, что я ожидаю увидеть. запасная площадка просто лежит под днем. да, оба пустые –