实现字体风格之间切换,一个个去改label的话太麻烦了,有没有全局的更改字体格式的。
写一个类继承Label,拓展一个更换全局字体的接口
简单改下LanguageData 就行了
import * as i18n from './LanguageData';
import { _decorator, Component, Label, RichText, Font } from 'cc';
const { ccclass, property, executeInEditMode } = _decorator;
@ccclass('LocalizedLabel')
@executeInEditMode
export class LocalizedLabel extends Component {
label: Label | RichText | null = null;
@property
key: string = '';
@property
refreshOnEnable: boolean = true;
onLoad() {
if (!i18n.ready) {
i18n.init('zh');
}
this.fetchRender();
}
onEnable() {
if (this.refreshOnEnable) {
this.fetchRender();
}
}
fetchRender() {
let label: Label | RichText = this.getComponent(Label);
if (!label) {
label = this.getComponent(RichText);
}
if (label) {
this.label = label;
this.updateLabel();
return;
}
}
updateLabel() {
this.label && (this.label.string = i18n.t(this.key));
let font = i18n.getFontName();
if (!font || font.length < 1) return;
globalThis.gameManager.resMgr.loadFont("textures/font/" + font, (e, font: Font) => {
if (e) return;
try {
this.label.font = font;
} catch {
}
})
}
}
然后是在需要用到的地方调用这个接口是吗
i18n上有这个getFontName()方法吗
没,自己写一下
不是很懂具体实现过程,刚上手cocos,请问你项目中有用到吗,可以看看实现过程吗。
这个东西思路其实很简单,就是使用cocos自己的i18组件,在i18组件在赋值时加一个字体设置,getFontName 是获取当前语言的字体,我写在了LanguageData文件中.修改的代码上边给你了.
这个已经很清楚了,如果还不清楚,可以不要着急去改代码,先把i18 的代码看懂,看懂i18的那几个ts文件都有什么用,再去看怎么改的就很简单了.
export function getFontName() {
const win: any = window;
let data = win.languages[_language];
return data["FONT"];
}
好的,谢谢你