我不知道如何在短短几秒钟内加载纹理。这需要怪物20秒以上的时间。
最初,我把动画放在单独的纹理图册中。它们的名称类似于sprite_002@2x~iphone.png
。当它们分开时,我使用了与苹果文档中类似的代码:
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秒的加载时间,所以我知道我做错了什么。
您的加载时间将取决于地图册的大小。因此,如果你碰巧有大量的它们,而且它们很大,这将需要一些时间。
我以前在这里见过这种问题的变体。
我的建议是实际改变你处理这个问题的方法。这是将工作量分解,并随着时间的推移在后台进行。这就是为什么许多游戏都有加载屏幕的原因。
根据你的游戏,你可能会格外狡猾,在游戏进行时在背景中加载纹理(或任何资产)。通常情况下,你不需要在游戏开始时加载所有纹理。
当我制作游戏时,我做的第一件事就是创建一个后台加载程序,如果我还没有的话。然后,我围绕异步加载资产的前提构建游戏。
20秒很长。但根据你的描述,这听起来需要相当长的时间。