2.4.4 远程加载BMFont 解析数据问题

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

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;
},