CC的动态合图, 很多项目都会用到,我用起来有几个问题
- 合图位置用了很简单的计算方法,导致一张动态合图里有很多空白位的情况下又开第二张动态合图,浪费内存。
- 在Label为Bitmap的情况下,N个同文案Label会产生N张图片在动态合图中, 很容易把动态合图打爆。
- showDebug展示是2048px尺寸,开发时手机的分辨率下展开debug查看十分不方便
所以我的解决方案:
- 对于动态合图,引入MaxRect算法,使用散图的排列更加紧密, 减小空间浪费,相对也会增加一定运算量与内存
- 对Label产生的bitmap生成一个基于文案内容,fontSize,fontFaimly,outline,shadow的uuid作为索引, 每次合图时检测当前合图的uuid索引,用回已生成的图片。参考文章: 突破动态合图
- 添加showDebugScale(show:boolean,scale:number)函数, 可以自定义debug的缩放,debug固定在画 面左上角展示,合图加入红框与半透明黑方便区分。
- 额外增加repack方法, 以图片面积重新排序散图,去掉不用的散图,但较消耗cpu,只有特定需求才用
下列为合图情况
1-1: 未使用MaxRect前的动态合图
1-2: 使用MaxRect后的动态合图
2-1: 使用uuid索引前的动态合图
2-2: 使用uuid索引后的动态合图
使用方法:
- 只需将ccDynamicAtlasPlus.js放到项目中并在编辑器中勾选"导入插件"
- 于ccDynamicAtlasPlus.js中设置useMaxRect为true,searchUUID为true
详细可以看README文档**商店地址**
支持2.4.x与3.x
注意:3.x版中开启了searchFromUUID后,使用loadRemote加载ImageAsset再生成Texture时一定要手动为texture添加_uuid的属性,_uuid的值为你的图片路径
另外,由于没啥时间, 除H5平外都没测过,但组件其实是基于原版动态合图,底层的合图写入是一様的,只是计算位置方式不一様, 如果试过其他平台没问题请告知,谢谢!