mirror of
https://gitee.com/dgflash/oops-plugin-framework.git
synced 2026-05-22 17:06:53 +08:00
2. 存储模块性能提升,添加LRU缓存、批量操作支持,优化内存使用 3. 多语言模块性能与内存管理优化,组件查询性能提升 4. 时间模块类型安全与性能优化,使用泛型替代any,对象池机制减少内存分配 5. 事件系统修复双重注册、重复注册等严重问题,实现EventData对象池减少GC压力 6. RandomManager修复4个逻辑BUG,包括边界问题和越界问题 7. 音频模块内存与性能优化,避免重复加载,优化数据结构,添加完整清理机制 8. CCView与CCViewVM合并,支持按需启用MVVM 9. Collection模块优化,AsyncQueue添加队列容量限制,Collection查询性能提升 10. ECS系统全面优化,对象池复用减少内存分配,循环性能提升 11. 优化MVVM组件性能
143 lines
4.9 KiB
TypeScript
143 lines
4.9 KiB
TypeScript
/*
|
|
* @Author: dgflash
|
|
* @Date: 2021-07-03 16:13:17
|
|
* @LastEditors: dgflash
|
|
* @LastEditTime: 2023-08-22 16:34:28
|
|
*/
|
|
import { director, error, JsonAsset, TTFFont } from 'cc';
|
|
import { resLoader } from '../../../core/common/loader/ResLoader';
|
|
import { Logger } from '../../../core/common/log/Logger';
|
|
import { JsonUtil } from '../../../core/utils/JsonUtil';
|
|
import { LanguageData, LanguageDataType, LanguageType } from './LanguageData';
|
|
|
|
export class LanguagePack {
|
|
/**
|
|
* 刷新语言文字
|
|
* @param lang
|
|
*/
|
|
updateLanguage(lang: string) {
|
|
const rootNodes = director.getScene()!.children;
|
|
for (let i = 0; i < rootNodes.length; ++i) {
|
|
LanguageType.forEach((type) => {
|
|
const comps: any[] = rootNodes[i].getComponentsInChildren(type);
|
|
for (let j = 0; j < comps.length; j++) {
|
|
comps[j].language();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 下载对应语言包资源
|
|
* @param lang 语言标识
|
|
* @param callback 下载完成回调
|
|
*/
|
|
async loadLanguageAssets(lang: string, callback: Function) {
|
|
await this.loadTexture(lang);
|
|
await this.loadSpine(lang);
|
|
await this.loadJson(lang);
|
|
await this.loadTable(lang);
|
|
|
|
callback(lang);
|
|
}
|
|
|
|
/** 多语言Excel配置表数据 */
|
|
private async loadTable(lang: string): Promise<void> {
|
|
try {
|
|
const json = await JsonUtil.load('Language');
|
|
if (json) {
|
|
LanguageData.language.set(LanguageDataType.Excel, json);
|
|
Logger.instance.logConfig('config/game/Language', '下载语言包 table 资源');
|
|
}
|
|
} catch (err) {
|
|
error('[LanguagePack] 加载配置表失败:', err);
|
|
}
|
|
}
|
|
|
|
/** 纹理多语言资源 */
|
|
private loadTexture(lang: string): Promise<void> {
|
|
return new Promise((resolve, reject) => {
|
|
const path = `${LanguageData.path_texture}/${lang}`;
|
|
resLoader.loadDir(path, (err: any, assets: any) => {
|
|
if (err) {
|
|
error('[LanguagePack] 加载纹理资源失败:', err);
|
|
resolve();
|
|
return;
|
|
}
|
|
Logger.instance.logConfig(path, '下载语言包 textures 资源');
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
|
|
/** Json格式多语言资源 */
|
|
private async loadJson(lang: string): Promise<void> {
|
|
try {
|
|
const path = `${LanguageData.path_json}/${lang}`;
|
|
const jsonAsset = await resLoader.load(path, JsonAsset);
|
|
if (jsonAsset) {
|
|
LanguageData.language.set(LanguageDataType.Json, jsonAsset.json);
|
|
Logger.instance.logConfig(path, '下载语言包 json 资源');
|
|
}
|
|
|
|
// 尝试加载字体资源
|
|
const font = await resLoader.load(path, TTFFont);
|
|
if (font) {
|
|
LanguageData.font = font;
|
|
Logger.instance.logConfig(path, '下载语言包 ttf 资源');
|
|
}
|
|
} catch (err) {
|
|
error('[LanguagePack] 加载JSON资源失败:', err);
|
|
}
|
|
}
|
|
|
|
/** SPINE动画多语言资源 */
|
|
private loadSpine(lang: string): Promise<void> {
|
|
return new Promise((resolve, reject) => {
|
|
const path = `${LanguageData.path_spine}/${lang}`;
|
|
resLoader.loadDir(path, (err: any, assets: any) => {
|
|
if (err) {
|
|
error('[LanguagePack] 加载Spine资源失败:', err);
|
|
resolve();
|
|
return;
|
|
}
|
|
Logger.instance.logConfig(path, '下载语言包 spine 资源');
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 释放某个语言的语言包资源包括json
|
|
* @param lang
|
|
*/
|
|
releaseLanguageAssets(lang: string) {
|
|
try {
|
|
// 释放纹理资源目录
|
|
const langTexture = `${LanguageData.path_texture}/${lang}`;
|
|
resLoader.releaseDir(langTexture);
|
|
|
|
// 释放JSON资源
|
|
const langJson = `${LanguageData.path_json}/${lang}`;
|
|
const json = resLoader.get(langJson, JsonAsset);
|
|
if (json) {
|
|
json.decRef();
|
|
}
|
|
|
|
// 释放字体资源
|
|
const font = resLoader.get(langJson, TTFFont);
|
|
if (font) {
|
|
font.decRef();
|
|
}
|
|
|
|
// 释放Spine资源目录
|
|
const langSpine = `${LanguageData.path_spine}/${lang}`;
|
|
resLoader.releaseDir(langSpine);
|
|
|
|
Logger.instance.logConfig(`释放语言包资源: ${lang}`);
|
|
} catch (err) {
|
|
error('[LanguagePack] 释放资源失败:', err);
|
|
}
|
|
}
|
|
}
|