0

我遇到了与此处描述的完全相同的问题,但是建议的解决方案不起作用。简而言之,当在场景之间转换时,中间的转换被完全跳过,因为演示者加载时间太长。现在我正在寻找一种方法来正确预加载场景的所有内容。我要做的是:

  1. 在应用程序启动时分配/初始化场景
  2. 预加载场景之后包含的所有纹理
  3. 几秒钟后,呈现现场。

第一次触发转换时,它总是被跳过,所有后续尝试都按预期工作。

这是我如何分配/初始化和预加载场景的示例(在启动时):

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会立即返回(这是预期的),所以我可以在加载完成之前导致转换,但不管我等待多长时间,它总是滞后。

非常感谢任何提示/帮助!

4

1 回答 1

0

原来问题毕竟不是纹理。我拼错了字体的名称,这使系统寻找合适的替换,导致延迟。

这是同样的问题: 如何缓存或预加载 SKLabelNode 字体?

于 2015-08-07T09:53:09.363 回答