2

这让我思考。

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

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

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

4

1 回答 1

7

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

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

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

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

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

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

于 2014-01-02T21:54:44.297 回答