关于文字与图片的合批

最近遇到一个问题,有一个组件是这样的:由动态文字(玩家名字)和图片(血条,属性之类)组成,并且相互之间可能层叠,所以没有办法文字一批,图片一批,这样会破坏遮挡关系,想问一下大家有没有比较好的实现方案(要支持微信小游戏)

这个组件最多可能会有100~200多个之间

把文本的cachemode改为bitmap后,文本会缓存成一个位图加入到动态合图的图集里。不过还有后续的问题,文本不停修改会不停地塞入位图,导致动态合图的图集塞满。
可以参考大佬们的帖子 【乐府】突破Label的缓存模式之(1) BITMAP
需要修改引擎源码。个人有个比较粗暴一点的解决方案,动态图集塞满后,将它整体销毁重建一遍。注意这时候要重置一下所有使用到相关图片的精灵(active 设置一下即可);这个方案也是要改源码的,但是改动量少。

1赞

这个其实有一个问题,就是一旦使用这个方案,图片原始资源释放不及时,所以微信上推荐不使用,默认CLEANUP_IMAGE_CACHE也是关闭的。

文字相关的渲染的源码,我看了一遍,感觉是设计不够开放,可定制的细节太少;如果CLEANUP_IMAGE_CACHE=false也无法合批,这个设计上不合理。

  1. 我目前的方案是,保持 CLEANUP_IMAGE_CACHE = false,使用资源及时释放。
  2. 直接加载ImageAssets,从ImageAssets构建SpriteFrame,把这个sprite frame加入自己生成DynamicAlatsManger上。
  3. 使用Label生成文字,然后隐藏这个label,创建一个Sprite,把label的spriteFrame设置给Sprite,以代替 Label显示。

这个方案可以自己合理管理这个DynamicAlatsManger,只是折中方案。