我遇到了与此处所述完全相同的问题,但是建议的解决方案不起作用。简而言之,在场景之间切换时,由于主持人加载时间太长,因此完全跳过了两者之间的切换。现在,我正在寻找一种正确预加载场景所有内容的方法。我要做的是:
首次触发转换时,始终会跳过该转换,随后的所有尝试均会按预期进行。
这是我如何分配/初始化和预加载场景(启动时)的示例:
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
会立即返回(这是有意的),因此我可以在加载完成之前进行转换,但是不管我等待多长时间,它总是会滞后。
任何提示/帮助,不胜感激!
原来问题根本不是纹理。我拼错了字体名称,这使系统寻找合适的替代字体,从而导致延迟。
这是同样的问题:如何缓存或预加载SKLabelNode字体?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句