微信小游戏环境下完整加载字体压缩包的流程。
这下不用担心ttf字体太大了。
unzipTTF() {
if(cc.sys.platform === cc.sys.WECHAT_GAME) {
let self = this;
let fs = wx.getFileSystemManager();
fs.access({
path: wx.env.USER_DATA_PATH + '/' + "IPix.ttf",
success(res) {
console.log('成功加载本地字体', res);
self.loadIPixTTF();
},
fail(res) {
console.log('本地没有字体');
// let tmpFile = cc.loader.md5Pipe.transformURL(cc.url.raw('resources/Font/IPix.zip'));
let tmpFile = cc.url.raw('resources/Font/IPix.zip'); // cc.loader.load会自动去提交md5后缀,所以不需要用cc.loader.md5Pipe.transformURL
cc.loader.load({url: tmpFile, type: 'binary'}, (err: Error, buf: ArrayBuffer) => {
if(err) {
console.error('load IPix.zip error ', err);
return;
}
console.log('load IPix.zip success');
fs.writeFile({
filePath: `${wx.env.USER_DATA_PATH}/IPix.zip`,
data: buf,
success(res) {
console.log('write IPix.zip success', res);
fs.unzip({
zipFilePath: wx.env.USER_DATA_PATH + '/IPix.zip',
targetPath: wx.env.USER_DATA_PATH,
success(res) {
console.log('成功解压字体zip包')
self.loadIPixTTF();
},
fail(res) {
console.log(res)
}
})
},
fail(res) {
console.log('write IPix.zip fail', res);
}
});
});
}
});
}
}
loadIPixTTF() {
cc.loader.load({url : wx.env.USER_DATA_PATH + '/' + 'IPix.ttf'}, (err, ret)=>{
let font = new cc.TTFFont();
// font.isValid = true;
font.name = 'IPix';
font._native = 'IPix.ttf';
font.loaded = true;
font._fontFamily = 'IPix';
font._objFlags = 0;
// 引擎在初始化cc.Label时设置默认的字体
let oldOnLoad = cc.Label.prototype.onLoad;
cc.Label.prototype.onLoad = function() {
this.font = font;
oldOnLoad.call(this);
}
});
}