从Spritekit纹理图集加载纹理的最佳方式

时间:2015-02-28 18:18:12

标签: ios iphone sprite-kit textures

我无法弄清楚如何在短短几秒内加载纹理。这是一个20多秒的怪物。

最初,我在单独的纹理地图集中制作了动画。它们的名称类似于sprite_002@2x~iphone.png。当它们分开时,我使用的代码类似于Apple文档中的代码:

SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"monster"];
SKTexture *f1 = [atlas textureNamed:@"monster-walk1.png"];
SKTexture *f2 = [atlas textureNamed:@"monster-walk2.png"];
SKTexture *f3 = [atlas textureNamed:@"monster-walk3.png"];
SKTexture *f4 = [atlas textureNamed:@"monster-walk4.png"];
NSArray *monsterWalkTextures = @[f1,f2,f3,f4];

我的代码是:

let names = myAtlas.textureNames as [String];
for name in names {
   myTextureArray.append(myAtlas.textureNamed(name as String));
}

对于6个不同质地的地图集中的6个动画,每个250帧,加载大约需要6秒钟。

我能够消除60-70%的帧并将所有帧塞入单个纹理图集中,但现在我无法在合理的时间范围内加载它。

我一直在尝试这些代码:

    for i in 1...124 {
        let name = String(format: "sprite_%03d", i);
        let texture = imagesAtlas.textureNamed(name);
        spriteTextures.append(texture);
    }

大多数游戏iPhone游戏没有20秒的加载时间,所以我知道我在这里做错了。

1 个答案:

答案 0 :(得分:1)

您的加载时间取决于地图集的大小。因此,如果您碰巧拥有大量的并且它们很大,则需要一些时间。

我之前已经看过这类问题的变体。

我的建议是实际改变你对问题的处理方法。这会分散工作量并随着时间的推移在后台进行。这就是许多游戏都有加载屏幕的原因。

根据您的游戏情况,您可能会在游戏进行时在背景中额外偷偷摸摸地加载纹理(或任何资产)。通常情况下,您不需要在游戏开始时加载所有纹理。

当我制作游戏时,我做的第一件事就是创建一个后台加载器,如果我还没有。然后,我围绕异步加载资产的前提构建游戏。

20秒很长。但根据你的描述,听起来好像需要花费很多时间。