如何正确预装SKScenes?

时间:2015-08-05 15:53:16

标签: sprite-kit preload skscene sktexture

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

  1. 在应用程序启动时分配/初始化场景
  2. 预加载所有纹理 此后的场景由
  3. 组成
  4. 几秒钟后,出现了 场景。
  5. 第一次触发转换时,它总是被跳过,所有后续尝试都按预期工作。

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

    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会立即返回(这是预期的),所以我可以在加载完成之前进行转换,但是等待多久并不重要,它总是滞后。

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

1 个答案:

答案 0 :(得分:0)

事实证明问题不是纹理。我拼错了字体的名称,这使得系统寻找合适的替代品,导致延迟。

以下是同一个问题: How to cache or preload SKLabelNode font?