这真的合适吗? 关于SpriteFrame的使用!

首先说我的需求,中大型项目的道具模块, 大概有500多个图标,需要合1024 * 1024的 3张图,配置表里面是配图标id,进入游戏前全部load进去缓存,在使用的时候,根据id,固定道具路径去取到Spriteframe! 这是一个很常见的需求吧。 但是,cc.loader必须要指定是哪一张图集。。。。。。。。。。。。。。。。。。。。。。。。 难不成我配置表里面要加一个图集的字段? 那么图集调整的时候,我怎么保证碎图永远在一个固定的图集上。

我的临时处理办法是,cc.loader.loadDid(… cc.SpriteFrame )把这三张图集的所有 spriteframe, 重新存到自己维护的 一个对象里面, 取的时候直接从自己维护的对象里面取,不通过cc.loader.getRes。 最不想用遍历。。。无谓的遍历太恶心人了

你可以不用图集,碎图,需要哪个下载哪个

想用图集就弄2048*2048的大图

这个还真没用过!我试试。

碎图,那DrawCall呢? 2048 * 2018 也不够怎么办?

你500个道具图标是会全部显示吗
要是看拥有情况,用到哪个才显示哪个,那就用碎图,DrawCall不会多多少,加载还快,不用为了找一个图下载3个图集
要是基本全要显示,那3个图集,你找一下也不费事,3个图集分别getSpriteFrame一下,哪个出来算哪个,能分类加个字段也行

背包里面会用,一般的话同时可以到100多个

没其他解了,只能全部cache

TexturePacker 真的可以多张合图使用一个plist吗? 实在找不到,美术也没搞过,问了几个程序也没用过。

是我搞错了:joy:对不起啊

http://blog.csdn.net/song_hui_xiang/article/details/9316195

我只是粗略的浏览了上面的文章,没有仔细看,我以为可以打成多个图片公用一个plist文件,结果还是多个plist文件

OK,沒关系!我暂时用我的方法处理了。

除了上面提到的方法,我建议直接在 id 上区分图集。id 应该是有规律的,可以判断出图片类型,图集是哪一个。

1赞

只能碎图合并成一张图集导出,共用一个plist

技术不好解决的,就用工程思维。。。赞~~

直接上我的代码吧,是在进入游戏前loading时加载的。

/**
 * 缓存常用图集资源 
 * @Author   Zhx
 * @DateTime 2018-01-08
 * @param    {[type]}   resPath          
 * @param    {[type]}   progressCallback 
 * @param    {Function} callback         
 * @param    {[type]}   key              该图集加载完成标识
 * @return   {[type]}                    [description]
 */
cacheSpriteFrame: function(resPath, progressCallback, callback, key) {
    cc.loader.loadResDir(resPath, cc.SpriteFrame, progressCallback, function(err, frames) {
        for(var index in frames){
            cacheSpriteFrames[frames[index].name] = frames[index];
        }
        callback(err, frames, key);
    });
},

/**
 * 从缓存获取精灵帧
 * @Author   Zhx
 * @DateTime 2018-01-08
 * @param    {[type]}   frameId 碎图id
 * @return   {[type]}           [description]
 */
getSpriteFrameFromChache: function(frameId){
    if (cacheSpriteFrames[frameId]) return cacheSpriteFrames[frameId];
},

cc.loader.getRes(“资源路径”) 这样不就行了吗?为什么要再加一个数组缓存?

不是图集啊

如果图太多 每个图集只用到一个icon 非常浪费内存.
散图是最佳方式, 道具这种通常都无法合并draw call的, 无所谓.
如果有合并draw call需求, 可以使用动态图集, 即将使用到的icon代码合并到一张texture上, 网易部分游戏的UI就是这样弄的.