2015-08-05 2 views
0

У меня есть такая же проблема, как описано here, однако предлагаемое решение не будет работать. Короче говоря, при переходе между сценами переход между ними пропускается целиком, потому что он слишком долго загружается. Теперь я ищу способ правильно предварительно загрузить все содержимое сцены. Что я делаю, это:Как правильно предварительно загрузить SKScenes?

  1. Alloc/инициализации сцены при запуске приложения
  2. преднагрузки все текстуры сцена состоит из впоследствии
  3. через несколько секунд, представить сцену.

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

Вот пример того, как я Alloc/инициализации и поджать сцены (при запуске):

self.menuScene = [[LEMenuScene alloc] initWithSize:self.bounds.size]; 
[self.menuScene preload]; 

причем preload категория SKScene:

- (void) preload { 
    NSMutableArray* allTextures = [[NSMutableArray alloc] init]; 
    [self enumerateChildNodesWithName:@"//SKSpriteNode" usingBlock:^(SKNode *node, BOOL *stop) { 
     SKTexture* texture = ((SKSpriteNode*)node).texture; 
     if (texture) [allTextures addObject: texture]; 
    }]; 

    [SKTexture preloadTextures:allTextures withCompletionHandler:^{ 
     //nop 
    }]; 
} 

Я знаю, что загрузка выполняется асинхронно и что preload будет немедленно возвращаться (что предназначено), поэтому я могу вызвать переход до завершения загрузки, но неважно, как долго я жду, он всегда отстает.

Любые советы/помощь с благодарностью!

+0

Вы уверены, что предзагрузка закончил до перехода? Вы начинаете переход внутри «preloadTextures» completeHandler? Или попробуйте поместить NSLog внутри completeHandler и прямо перед тем, как перейти, и посмотреть, с чего сначала регистрируется. – CloakedEddy

+0

Спасибо за подсказку, но да, я уверен. Переход запускается нажатием кнопки (не изнутри обработчика завершения), но только после того, как было зарегистрировано сообщение о завершении. Поэтому, несмотря на то, что он закончил предварительную загрузку, он отстает. –

+1

Возможно, простой вопрос, но вы уверены, что представляете предварительно загруженный экземпляр menuScene (а не другой)? Если да, это выглядит хорошо. Тогда проблема будет трудно точно определить, не отправив больше кода реализации LEMenuScene. – CloakedEddy

ответ

0

Оказывается, в конце концов проблема не была текстурой. Я набрал имя шрифта, что заставило систему искать подходящую замену, вызывая задержку.

Вот тот же вопрос: How to cache or preload SKLabelNode font?

Смежные вопросы