如何正确预加载 SKScenes?
How do I properly preload SKScenes?
我遇到了与 here 所述完全相同的问题,但建议的解决方案不起作用。简而言之,当在场景之间转换时,中间的转换被完全跳过,因为 presentee 加载时间太长。现在我正在寻找一种方法来正确预加载场景的所有内容。
我做的是:
- alloc/init应用启动时的场景
- 预加载所有纹理
场景包括此后
- 几秒后,呈现
场景.
第一次触发转换时,它总是被跳过,所有后续尝试都按预期工作。
这是我如何 alloc/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
}];
}
我知道加载是异步执行的,preload
会立即 return(这是有意的),所以我可以在加载完成之前进行转换,但它不会无论我等多久,它总是滞后。
非常感谢tips/help!
原来问题根本不是纹理。我拼错了字体名称,导致系统寻找合适的替代品,导致延迟。
这是同样的问题:
How to cache or preload SKLabelNode font?
我遇到了与 here 所述完全相同的问题,但建议的解决方案不起作用。简而言之,当在场景之间转换时,中间的转换被完全跳过,因为 presentee 加载时间太长。现在我正在寻找一种方法来正确预加载场景的所有内容。 我做的是:
- alloc/init应用启动时的场景
- 预加载所有纹理 场景包括此后
- 几秒后,呈现 场景.
第一次触发转换时,它总是被跳过,所有后续尝试都按预期工作。
这是我如何 alloc/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
}];
}
我知道加载是异步执行的,preload
会立即 return(这是有意的),所以我可以在加载完成之前进行转换,但它不会无论我等多久,它总是滞后。
非常感谢tips/help!
原来问题根本不是纹理。我拼错了字体名称,导致系统寻找合适的替代品,导致延迟。
这是同样的问题: How to cache or preload SKLabelNode font?