使用SKTextureAtlas而不是仅按名称调用图像

时间:2014-01-26 09:57:50

标签: sprite-kit

为什么我要在其他选项中执行其中一个选项...我想,我不明白它们与我的代码之间的区别

- 在Xcode中制作一个名为“HeroSprites.atlas”的纹理图集,图像为“Hero.png”,可能还有其他变体。

示例1:

SKSpriteNode* heroSprite = [SKSpriteNode spriteNodeWithImageNamed:@"Hero"];
//pulls in image from the atlas without having created an atlas object first
[self addChild: heroSprite];

示例2:

SKTextureAtlas* heroAtlas = [SKTextureAtlas atlasNamed:@"HeroAtlas"];
SKSpriteNode* heroSprite = [SKSpriteNode spriteNodeWithTexture:[heroAtlas textureNamed:@"Hero"]];
//pulls in image from the atlas after having created an atlas object first
[self addChild:heroSprite];

据我所知,两者似乎都将地图集加载到内存中,以便我可以调用其中的所有图像。我能想到的唯一原因是,如果在单独的地图册中有相同的图像名称,但是很容易避免这种情况。

2 个答案:

答案 0 :(得分:1)

以下是您应该了解的SKTextureAtlas:

  • 只要将文件直接保存到您的atlas文件夹中即可 资源树,您不必手动将其添加到文件目录。
  • 绘图速度更快,因为所有精灵都具有相同的混合模式和纹理 来自同一地图集的是一次性绘制的。
  • 不支持mipmap(Apple遗憾地没有记录)。
  • 在所有纹理中共享混合模式(这可以通过有两个图集来实现,一个用于线性,一个用于最接近)。

答案 1 :(得分:1)

SKTextureAtlas可以提高内存使用率和渲染性能。例如,如果你有一个带有不同纹理的精灵的场景,Sprite Kit会为每个纹理执行一次绘图传递。但是,如果所有纹理都是从相同的纹理图集加载的,那么Sprite Kit可以在单个绘图传递中渲染精灵,并使用较少的内存来执行此操作。每当你拥有总是一起使用的纹理时,你应该将它们存储在地图集中。