这让我思考。
游戏开始,我使用-spriteNodeWithImageNamed:
方法创建精灵。稍后进行动画制作,我创建了一个SKTextureAtlas对象。有人说它更快,因为-spriteNodeWithImageNamed:
会先在您的应用程序捆绑中查找png,然后再查找地图集。
但是对我来说还不清楚的是:如果以后创建SKTextureAtlas,这会知道已经加载的地图集图像吗?或者它会变得愚蠢,只是再次加载该图像?
如果我在同一图集的多个节点中创建SKTextureAtlas对象。它会多次加载地图集吗?我是否必须确保仅对一个地图集使用一个SKTextureAtlas实例?
最佳答案
的确,spriteNodeWithImageNamed:
将首先在捆绑软件中查找文件。如果找不到捆绑软件文件,它将检查捆绑软件中可用图集中是否存在具有该名称的图像。
如果Sprite Kit在任何地图集中都找到了具有该名称的图像,它将自动加载该地图集,以便在使用spriteNode/initWithImageNamed:
初始化程序时将所述图像用作精灵。这样一来,无需图集就可以轻松开始开发,之后又可以将文件添加到图集中。
我建议从一开始就使用地图集,因为可能会有细微的差异,并且您将能够更实际地评估应用程序的性能。
是的,Sprite Kit非常聪明,不会重新加载内存中的资源。它也不会创建相同地图集的新实例,而是会返回指向相同名称的现有地图集的指针。
Sprite Kit显然还采用了一种缓存机制,因此,即使删除了对资源文件的最后一个强引用,该文件仍将保留在内存中。但是,我认为没有人对Sprite Kit最终从内存中释放缓存实例的方式以及时间和顺序进行深入分析。
长话短说:依靠Sprite Kit为您做正确的事。
关于ios - 如果以后使用SKTextureAtlas,Sprite Kit是否会多次加载纹理图集?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20889211/