我目前在SpriteKit和SKTexture预加载中遇到一个奇怪的间歇性问题。我有多个图像阵列,它们以以下格式预加载:
- (NSDictionary *)loadTexturesWithNames:(NSArray *)aNames
{
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSMutableArray *textureArray = [NSMutableArray array];
for (NSString *textureName in aNames)
{
SKTexture *texture = [SKTexture textureWithImageNamed:textureName];
if (texture)
{
[textureArray addObject:texture];
[dict setObject:texture forKey:textureName];
}
}
[SKTexture preloadTextures:textureArray withCompletionHandler:^{
_iCounter++;
[self loadTextures];
}];
return dict;
}
90%的时间都可以正常工作,但偶尔会出现以下错误:
SKTexture:加载图像资源时出错:
这不会在任何特定的图像集上发生,只是随机发生。因此,有时播放器会加载正常,而其他加载器则不会。这可能是内存问题吗?我使用_iCounter拆分纹理加载,以确保在开始下一组图像之前先加载前一组图像,以尝试停止过多的并发加载。这加快了过程,但我仍然看到此间歇性问题。
是否有其他人看到过此消息,或者不知道是什么原因引起的?
根据我的经验,一个常见的原因是您不等待完成处理程序被调用。例如,在“ image”是要预加载的图像之一的情况下执行以下操作可能是错误的来源:
[self loadTexturesWithNames:names];
SKSpriteNode* sprite = [SKSpriteNode spriteNodeWithImageNamed:@"image"];
当然,如果仅使用该loadTexture
方法创建精灵节点和纹理,则应该没问题。除非您执行其他后台任务,否则您将loadTextureWithNames
在后台运行选择器(独立线程)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句