使用背景
creator内嵌在一个webView里面,由web下载好各种类型资源(图片、spine、ttf字体等),然后通过dataUrl传递给creator。
所以creator需要解析dataUrl,创建creator内部的资源类型。
其他类型的资源可以通过assetManager接口进行加载和解析,但是ttf字体却不生效。
解决方案
生成字体资源类型需要特殊的方式,直接上代码
//这是字体名称,可自定义,但后续会设置在_fontFamily中,所以保证不跟其他字体名称相同
const name = 'newTTF';
//使用FontFace加载dataUrl
const fontFace = new FontFace(name, `url(${dataUrl})`);
fontFace.load().then((font) => {
//这是重点:需要把加载好的字体放到document.fonts中才能使用
(document.fonts as any).add(font);
const ttfFont = new TTFFont();
//这里设置创建的ttfFont的_fontFamily属性,这样这个字体就可以
ttfFont._fontFamily = name;
//后面可以设置Label组件的font
const labelNode = new Node();
labelNode.addComponent(Label).font = ttfFont;
});