让你的动态合图(dyanmicAtlasManger)使用率更高,更新支持3.X!!

商店地址

CC的动态合图, 很多项目都会用到,我用起来有几个问题

  1. 合图位置用了很简单的计算方法,导致一张动态合图里有很多空白位的情况下又开第二张动态合图,浪费内存。
  2. 在Label为Bitmap的情况下,N个同文案Label会产生N张图片在动态合图中, 很容易把动态合图打爆。
  3. showDebug展示是2048px尺寸,开发时手机的分辨率下展开debug查看十分不方便

所以我的解决方案:

  1. 对于动态合图,引入MaxRect算法,使用散图的排列更加紧密, 减小空间浪费,相对也会增加一定运算量与内存
  2. 对Label产生的bitmap生成一个基于文案内容,fontSize,fontFaimly,outline,shadow的uuid作为索引, 每次合图时检测当前合图的uuid索引,用回已生成的图片。参考文章: 突破动态合图
  3. 添加showDebugScale(show:boolean,scale:number)函数, 可以自定义debug的缩放,debug固定在画 面左上角展示,合图加入红框与半透明黑方便区分。
  4. 额外增加repack方法, 以图片面积重新排序散图,去掉不用的散图,但较消耗cpu,只有特定需求才用

下列为合图情况
1-1: 未使用MaxRect前的动态合图
damplus-1-1
1-2: 使用MaxRect后的动态合图
damplus-1-2
2-1: 使用uuid索引前的动态合图
damplus-2-1
2-2: 使用uuid索引后的动态合图
damplus-2-2

使用方法:

  1. 只需将ccDynamicAtlasPlus.js放到项目中并在编辑器中勾选"导入插件"
  2. 于ccDynamicAtlasPlus.js中设置useMaxRect为true,searchUUID为true
    详细可以看README文档**商店地址**

支持2.4.x与3.x
注意:3.x版中开启了searchFromUUID后,使用loadRemote加载ImageAsset再生成Texture时一定要手动为texture添加_uuid的属性,_uuid的值为你的图片路径
另外,由于没啥时间, 除H5平外都没测过,但组件其实是基于原版动态合图,底层的合图写入是一様的,只是计算位置方式不一様, 如果试过其他平台没问题请告知,谢谢!

6赞

可以打个一折么

只支持2.4.5? 最新的3.8.2呢

支持下3.8.x吧

厉害~~~~

3.x 版已经在开发的路上

最3.X 版已发佈,使用方法一致,追加showDebug 原版展示合图。
注意:3.x版中开启了searchFromUUID后,使用loadRemote加载ImageAsset再生成Texture时一定要手动为texture添加_uuid的属性,_uuid的值为你的图片路径

买了,试一试

老鸟不用买,菜鸟买了看不懂,能写个讲解源码的文档丢里面吗

我这个源码其实给菜鸟直接用就行,并且源码使用的技术方案我在贴上也写了,如果菜鸟要成长,看源码是唯一路径,也可以网上查找相关算法与原理。要去到手把手讲解源码,你觉得这只值得19.9吗?在我的角度, 以及我的出发点,如果我这个东西能解决你当前遇到的问题,你只需一杯奶茶钱,难道你在公司,有人帮你解决你本应该解决却无能为力的问题时,你不会请TA喝杯奶茶吗?而且在公司,大多数前辈多数只会叫你看源码,而不会手把手跟你讲解源码。如果前辈愿意源码讲解给你,那你在人情上也不只一杯奶茶吧?

不对劲 动态图集里只有一个头像 别人也只能读到自己的头像
image

你应该是开启了searchFromUUID吧,在3.X中 使用loadRemote加载ImageAsset方法再new Texture2D会出现_uuid为空的情况,你可以加载完后把new texture的_uuid = 图片连接,注意for loop下使用异步回调的闭包问题,还有问题可以QQ我