如何正确预加载SKScenes?

双M

我遇到了与此处所述完全相同的问题,但是建议的解决方案不起作用。简而言之,在场景之间切换时,由于主持人加载时间太长,因此完全跳过了两者之间的切换。现在,我正在寻找一种正确预加载场景所有内容的方法。我要做的是:

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

任何提示/帮助,不胜感激!

双M

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章