SpriteKit有时无法加载SKTexture

时间:2014-12-04 11:12:49

标签: ios sprite-kit preloading sktexture

我目前正在使用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分割纹理加载,确保前一组图像在开始下一个图像之前加载尝试并停止过多的并发加载。这加速了这个过程,但我仍然看到这个间歇性的问题。

有没有其他人看过这个,或者知道是什么原因引起的?

1 个答案:

答案 0 :(得分:2)

根据我的经验,一个常见的原因是你不等待调用完成处理程序。例如,做这样的事情,其中​​“图像”是预加载的图像之一可能是错误的来源:

[self loadTexturesWithNames:names];
SKSpriteNode* sprite = [SKSpriteNode spriteNodeWithImageNamed:@"image"];

当然如果你只在loadTexture方法中创建精灵节点和纹理,它应该没问题。除非您执行其他后台任务或在后台运行loadTextureWithNames选择器(单独的线程)。