官方文档中没有提供加载远程bmfont API,这里实现加载远程字体,
getFontDefDictionary数据结构参考了引擎源码
看上去都没问题了,但是它报错。。。。

思考中。。。
onLoad() {
let jsonUrl = "http://172.18.0.62:8080/num_money.json";// library下引擎解析好的json数据
let pngUrl = "http://172.18.0.62:8080/num_money.png";
cc.assetManager.loadAny([{ url: jsonUrl, ext: '.json' }], (error, font) => {
cc.assetManager.loadRemote(pngUrl, (error, texture) => {
let bmFont = new cc.BitmapFont();
let spriteFrame = new cc.SpriteFrame(texture);
let _fontDefDictionary = this.getFontDefDictionary(texture,font._fntConfig.fontDefDictionary);
bmFont.spriteFrame = spriteFrame;
bmFont.fontSize = font.fontSize;
bmFont._fntConfig = font._fntConfig;
bmFont._fontDefDictionary = _fontDefDictionary;
this.testLabel.font = bmFont;
// this.testLabel.string = "666";
// console.log(this.testLabel.font)
// console.log(bmFont)
});
});
},
getFontDefDictionary(texture,data) {
let FontLetterDefinition = function FontLetterDefinition() {
this.u = 0;
this.v = 0;
this.w = 0;
this.h = 0;
this.offsetX = 0;
this.offsetY = 0;
this.textureID = 0;
this.valid = true;
this.xAdvance = 0;
};
let FontAtlas = function FontAtlas(texture) {
this._letterDefinitions = {};
this._texture = texture;
};
let newData = new FontAtlas(texture)
for (let k in data) {
let value = new FontLetterDefinition();
// cc.js.mixin(value, data[k]);
value.u = data[k].rect.x;
value.v = data[k].rect.y;
value.w = data[k].rect.width;
value.h = data[k].rect.height;
value.offsetX = data[k].xOffset;
value.offsetY = data[k].yOffset;
value.xAdvance = data[k].xAdvance;
newData._letterDefinitions[k] = value;
}
return newData;
},