这让我开始思考。
游戏开始了,我用-spriteNodeWithImageNamed:方法创建了精灵。稍后,对于动画,我创建了一个SKTextureAtlas对象。有些人说它更快,因为-spriteNodeWithImageNamed:会先在你的应用程序包中查找png,然后再查找地图集。
但我不清楚的是:如果我后来创建了一个SKTextureAtlas,它会知道已经加载的地图集图像,还是会变得愚蠢,并重新加载图像?
如果我为相同的地图集在多个节点中创建SKTextureAtlas对象。它会多次加载地图集吗?对于任何地图集,我必须确保只使用一个SKTextureAtlas实例吗?
发布于 2014-01-03 05:54:44
确实,spriteNodeWithImageNamed:将首先查找包中的文件。如果找不到捆绑包文件,它将检查捆绑包中可用的地图集中是否存在同名图像。
如果精灵工具包在任何图集中找到具有该名称的图像,它将自动加载该图集,以便在使用spriteNode/initWithImageNamed:初始化器时将该图像用作精灵。这使得在没有地图集的情况下开始开发以及以后向地图集添加文件变得很容易。
我建议从一开始就使用地图集,因为可能会有细微的差异,这样你就能够更真实地评估你的应用程序的性能。
是的,Sprite Kit足够聪明,不会重新加载已经在内存中的资源。
Sprite Kit显然也采用了缓存机制,因此即使删除了对资源文件的最后一个强引用,该文件也会保留在内存中。然而,我认为还没有人深入分析Sprite Kit最终如何、何时以及以什么顺序从内存中释放缓存的实例。
长话短说:依靠Sprite Kit为你做正确的事情。
https://stackoverflow.com/questions/20889211
复制相似问题