我的问题与所描述的完全相同
here
然而,提议的解决方案行不通。简而言之,当在场景之间转换时,由于演示者需要很长时间才能加载,因此会完全跳过场景之间的转换。现在我正在寻找一种方法来正确预加载场景的所有内容。
我所做的是:
-
应用程序启动时分配/初始化场景
-
预加载所有纹理
该场景由以下部分组成
-
几秒钟后,呈现
场景
第一次触发转换时,总是跳过它,所有后续尝试都按预期工作。
下面是我如何分配/init和预加载场景(启动时)的示例:
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
}];
}
我知道加载是异步执行的
预加载,预加载
将立即返回(这是预期的),因此我可以在加载完成之前进行转换,但不管我等待多长时间,它总是滞后的。
非常感谢任何提示/帮助!