如果我以后使用SKTextureAtlas,Sprite Kit会多次加载纹理图集吗?

这让我想到了。

游戏开始,我用-spriteNodeWithImageNamed:方法创建sprite。 稍后为动画,我创建了一个SKTextureAtlas对象。 有人说它更快,因为-spriteNodeWithImageNamed:将首先在你的应用程序包中查找png,之后它会查看地图集。

但是我不清楚的是:如果我稍后创建一个SKTextureAtlas会知道已经加载的地图集图像还是会变得愚蠢并只是再次加载图像?

如果我在同一地图集的多个节点中创建SKTextureAtlas对象。 它会多次加载地图集吗? 我必须确保我只为任何地图册使用一个SKTextureAtlas实例吗?

确实spriteNodeWithImageNamed:将首先在bundle中查找文件。 如果找不到捆绑文件,它将检查捆绑包中可用的地图集中是否存在具有该名称的图像。

如果Sprite Kit在任何地图集中找到具有该名称的图像,它将自动加载该地图集,以便在使用spriteNode/initWithImageNamed: initializers时将所述图像用作精灵。 这使得在没有地图集以及稍后将文件添加到地图集的情况下开始开发变得容易。

我建议从一开始就使用地图集,因为可能存在细微差别,您将能够更真实地评估应用程序的性能。

是的,Sprite Kit非常聪明,无法重新加载已经在内存中的资源。 它也不会创建相同图集的新实例,而是会返回指向已存在的同名图集的指针。

Sprite Kit显然也采用了一种缓存机制,因此即使删除了对资源文件的最后一个强引用,该文件仍将保留在内存中。 但是,我认为没有人对Sprite Kit最终从内存中释放缓存实例的方式,时间和顺序进行深入分析。

长话短说:依靠Sprite Kit为你做正确的事。