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

Posted

技术标签:

【中文标题】如果我稍后使用 SKTextureAtlas,Sprite Kit 是不是会多次加载纹理图集?【英文标题】:Does Sprite Kit load a texture atlas multiple times if I use SKTextureAtlas later?如果我稍后使用 SKTextureAtlas,Sprite Kit 是否会多次加载纹理图集? 【发布时间】:2014-01-02 18:19:49 【问题描述】:

这让我思考。

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

【讨论】:

以上是关于如果我稍后使用 SKTextureAtlas,Sprite Kit 是不是会多次加载纹理图集?的主要内容,如果未能解决你的问题,请参考以下文章

SP 元数据签名

从 Rcpp Armadillo 中的 sp_mat 访问维度名称

怎么在xp sp2 iis服务上使用多线程???

如果我稍后应用 ado 实体框架,推荐的数据访问层设计模式是啥?

ALAsset - 稍后访问缩略图

PayPal 购物车上传 - 如果用户点击离开 PayPal,则链接返回以稍后付款