- Creator 版本:2.0.5
目前尝试把BMFont用的SpriteFrame手动调用 cc.dynamicAtlasManager.insertSpriteFrame 加入到动态合图中,但界面中就显示不出来了。猜是BMFont渲染并不知道到动态合图里去取SpriteFrame。这个要如何改造才可以正确显示呢?
这个功能实现的话,UI的Drawcall数量应该可以大幅度降低。
目前尝试把BMFont用的SpriteFrame手动调用 cc.dynamicAtlasManager.insertSpriteFrame 加入到动态合图中,但界面中就显示不出来了。猜是BMFont渲染并不知道到动态合图里去取SpriteFrame。这个要如何改造才可以正确显示呢?
这个功能实现的话,UI的Drawcall数量应该可以大幅度降低。
动态图集是由引擎自身做判断,不需要手动添加,目前BMFont没有添加动态图集机制,如果手动执行insertSpriteFrame,你需要重定向BMFont的texture对象。
具体该怎么做呢?大佬,发段示例代码可好。
1.直接把BMTFONT的图片放到小图一起 打包成自动合图即可
改engine有点麻烦,目前是写了个脚本来干这个事情
` const {
ccclass
} = cc._decorator;
@ccclass
export default class BMFontMerger extends cc.Component {
start() {
if((cc as any).dynamicAtlasManager.maxFrameSize < 1024){
(cc as any).dynamicAtlasManager.maxFrameSize = 1024;
}
let label = this.getComponent < cc.Label > (cc.Label) as any;
if (label && label.font instanceof cc.BitmapFont) {
let frame = (label.font as any).spriteFrame;
if (!frame._original) {
(cc as any).dynamicAtlasManager.insertSpriteFrame(frame);
}
if (label._texture != frame._texture) {
label._activateMaterial(true);
}
}
}
} `
不过目前又遇到了sliced图片和bmfont不能合批,还在看怎么解决从 [BMFont字体如何加入动态合图]
谢谢大佬
已经优化了,下个版本应该就合并更新了。