官方的Label 图集根本不够用,已经扩展到了宽高2048 ,依旧很容易塞满,所以调整了一下合图的算法

839af9c84f33d05e8896a9f50f24b2bb

这图是 官方自己 CacheMode = char 模式下创建了一张图集,官方的算法是平移 ,然后根据当前这一行高度最高的那个字,进行换行,有点效率高,缺点如果一行字中有一个字特别大,那么换行的时候就会有对应的空间浪费。

在官方的基础上,设置了几种其他模式 ,缺点 性能会弱一些,有点,能够提高5-25% 的空间效率,将更多的文本放置在同一张图集里面
效果:74b3c8d34e15bbce1f03112fbfe31abf

修改的地方在font-util.ts 那边

5赞

代码呢?是不是少了什么呢?

https://gitee.com/wuzhouping/maxrects.git
算法地址
image
创建这个对象来使用
image
改成!
image
就可以了

创建对象,具体参数可以根据git上的代码了解image

7赞

这个绿框是怎么显示出来的呢,请教下

在引擎的Label 实现里面 找到labelLetter 图集,获取getAssemblerData 然后自己创建一个spriteFrame
把texture 赋值过去就好 。
至于要怎么显示 就自己创建一个sprite 赋值这个spriteFrame
就好

3赞

直接:racehorse: :pray:

是要在引擎的label里添加方法吗?不知道这个怎么去调,以前2.x版本直接有_shareAtlas这个参数了

这个 maxRectsPacker 需要将 gitee 上的源码引入到 引擎中吧?
还有使用

const rect = this.maxRectsPacker.add(width, height, letterTexture);
if (rect.oversized){ xxx }

后续的判定代码是什么?

从场景上拿一个Label 组件(cacheMode是char的),假设是labelCom
Label.Assembler.getAssembler(labelCom).getAssemblerData() 就是letterAtlas

谢谢分享,有没有 2.4版本的 希望题主给个思路 或者能出个 2.4.x 版本的

后续代码跟 引擎保持一致 ,所以就没贴了

暂时没有2.4 ,只做了3.7版本之后的

是LetterRenderTexture 吧, 不是letterAtlas