From 2563837ce638a8722cd979a13623e898bb877c80 Mon Sep 17 00:00:00 2001 From: dgflash Date: Tue, 16 Jul 2024 16:42:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E4=B8=AD=E5=9C=A8=E5=A4=9A=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E5=88=87=E6=8D=A2=E6=97=B6=EF=BC=8C=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=87=8A=E6=94=BE=E5=89=8D=E4=B8=80=E4=B8=AA=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9A=84=E6=89=80=E6=9C=89=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/core/Oops.ts | 19 +++-- assets/core/Root.ts | 64 +++++++++------ assets/core/common/event/MessageManager.ts | 16 ++-- assets/core/common/loader/ResLoader.ts | 8 +- assets/core/utils/JsonUtil.ts | 8 +- assets/core/utils/ViewUtil.ts | 8 +- .../animator-effect/EffectFinishedRelease.ts | 4 +- .../libs/animator-effect/EffectSingleCase.ts | 27 +++---- assets/libs/gui/language/Language.ts | 31 ++++---- assets/libs/gui/language/LanguageData.ts | 11 +++ assets/libs/gui/language/LanguageLabel.ts | 4 +- assets/libs/gui/language/LanguagePack.ts | 77 +++++++++---------- assets/libs/gui/language/LanguageSpine.ts | 4 +- assets/libs/gui/language/LanguageSprite.ts | 4 +- 14 files changed, 151 insertions(+), 134 deletions(-) diff --git a/assets/core/Oops.ts b/assets/core/Oops.ts index 8b46054..7a4cd71 100644 --- a/assets/core/Oops.ts +++ b/assets/core/Oops.ts @@ -5,6 +5,7 @@ * @LastEditTime: 2023-08-21 15:19:56 */ import { DEBUG } from "cc/env"; +import { EffectSingleCase } from "../libs/animator-effect/EffectSingleCase"; import { ecs } from "../libs/ecs/ECS"; import { ECSRootSystem } from "../libs/ecs/ECSSystem"; import { LanguageManager } from "../libs/gui/language/Language"; @@ -33,12 +34,14 @@ export class oops { static log = Logger; /** 游戏配置 */ static config = new Config(); + /** 本地存储 */ + static storage: StorageManager; + /** 资源管理 */ + static res: ResLoader; /** 全局消息 */ - static message: MessageManager = MessageManager.Instance; + static message: MessageManager; /** 随机工具 */ static random = RandomManager.instance; - /** 本地存储 */ - static storage: StorageManager = new StorageManager(); /** 游戏时间管理 */ static timer: TimerManager; /** 游戏音乐管理 */ @@ -47,21 +50,21 @@ export class oops { static gui: LayerManager; /** 三维游戏世界管理 */ static game: GameManager; - /** 资源管理 */ - static res = new ResLoader(); /** ----------可选模块---------- */ /** 多语言模块 */ - static language: LanguageManager; + static language: LanguageManager = new LanguageManager(); /** HTTP */ - static http: HttpRequest = new HttpRequest(); + static http: HttpRequest = new HttpRequest(); // 使用流程文档可参考、简化与服务器对接、使用新版API体验,可进入下面地址获取新版本,替换network目录中的内容(https://store.cocos.com/app/detail/5877) /** WebSocket */ - static tcp: NetManager = new NetManager(); + static tcp: NetManager = new NetManager(); // 使用流程文档可参考、简化与服务器对接、使用新版API体验,可进入下面地址获取新版本,替换network目录中的内容(https://store.cocos.com/app/detail/5877) /** ECS */ static ecs: ECSRootSystem = new ecs.RootSystem(); /** MVVM */ static mvvm = VM; + /** 对象池 */ + static pool = EffectSingleCase.instance; } // 引入oops全局变量以方便调试 diff --git a/assets/core/Root.ts b/assets/core/Root.ts index a087a7e..2b05720 100644 --- a/assets/core/Root.ts +++ b/assets/core/Root.ts @@ -5,12 +5,14 @@ * @LastEditTime: 2023-08-28 10:02:57 */ import { Component, Game, JsonAsset, Node, _decorator, director, game, screen, sys } from "cc"; -import { LanguageManager } from "../libs/gui/language/Language"; import { GameConfig } from "../module/config/GameConfig"; import { GameQueryConfig } from "../module/config/GameQueryConfig"; import { oops, version } from "./Oops"; import { AudioManager } from "./common/audio/AudioManager"; import { EventMessage } from "./common/event/EventMessage"; +import { message } from "./common/event/MessageManager"; +import { resLoader } from "./common/loader/ResLoader"; +import { StorageManager } from "./common/storage/StorageManager"; import { TimerManager } from "./common/timer/TimerManager"; import { GameManager } from "./game/GameManager"; import { GUI } from "./gui/GUI"; @@ -49,20 +51,45 @@ export class Root extends Component { } } - private loadConfig() { + private async loadConfig() { + // 创建持久根节点 + this.persistRootNode = new Node("PersistRootNode"); + director.addPersistRootNode(this.persistRootNode); + + // 资源管理模块 + oops.res = resLoader; + const config_name = "config"; - oops.res.load(config_name, JsonAsset, () => { - var config = oops.res.get(config_name); - if (config == null) { - this.loadConfig(); - return; - } + const config = await oops.res.loadAsync(config_name, JsonAsset); + if (config) { // oops.config.btc = new BuildTimeConstants(); oops.config.query = new GameQueryConfig(); oops.config.game = new GameConfig(config); + + // 本地存储模块 + oops.storage = new StorageManager(); + oops.storage.init(oops.config.game.localDataKey, oops.config.game.localDataIv); // 初始化本地存储加密 + + // 全局消息 + oops.message = message; + + // 创建音频模块 + oops.audio = this.persistRootNode.addComponent(AudioManager); + oops.audio.load(); + + // 创建时间模块 + oops.timer = this.persistRootNode.addComponent(TimerManager)!; + + // 游戏场景管理 + oops.game = new GameManager(this.game); + + // 游戏界面管理 + oops.gui = new LayerManager(this.gui); + + // 网络模块 oops.http.server = oops.config.game.httpServer; // Http 服务器地址 oops.http.timeout = oops.config.game.httpTimeout; // Http 请求超时时间 - oops.storage.init(oops.config.game.localDataKey, oops.config.game.localDataIv); // 初始化本地存储加密 + game.frameRate = oops.config.game.frameRate; // 初始化每秒传输帧数 this.enabled = true; @@ -70,7 +97,10 @@ export class Root extends Component { this.run(); oops.res.release(config_name); - }); + } + else { + this.loadConfig(); + } } update(dt: number) { @@ -93,20 +123,6 @@ export class Root extends Component { } protected init() { - // 创建持久根节点 - this.persistRootNode = new Node("PersistRootNode"); - director.addPersistRootNode(this.persistRootNode); - - // 创建音频模块 - oops.audio = this.persistRootNode.addComponent(AudioManager); - oops.audio.load(); - - // 创建时间模块 - oops.timer = this.persistRootNode.addComponent(TimerManager)!; - - oops.language = new LanguageManager(); - oops.game = new GameManager(this.game); - oops.gui = new LayerManager(this.gui); this.initGui(); this.initEcsSystem(); oops.ecs.init(); diff --git a/assets/core/common/event/MessageManager.ts b/assets/core/common/event/MessageManager.ts index f82be5d..48d2a0b 100644 --- a/assets/core/common/event/MessageManager.ts +++ b/assets/core/common/event/MessageManager.ts @@ -7,9 +7,7 @@ class EventData { public object: any; } -/** - * 批量注册、移除全局事件对象 - */ +/** 批量注册、移除全局事件对象 */ export class MessageEventData { private events: Map> = new Map(); @@ -31,7 +29,7 @@ export class MessageEventData { ed.object = object; eds.push(ed); - MessageManager.Instance.on(event, listener, object); + message.on(event, listener, object); } /** @@ -43,7 +41,7 @@ export class MessageEventData { if (!eds) return; for (let eb of eds) { - MessageManager.Instance.off(event, eb.listener, eb.object); + message.off(event, eb.listener, eb.object); } this.events.delete(event); } @@ -54,7 +52,7 @@ export class MessageEventData { * @param args(any) 事件参数 */ dispatchEvent(event: string, ...args: any) { - MessageManager.Instance.dispatchEvent(event, ...args); + message.dispatchEvent(event, ...args); } /** 清除所有的全局事件监听 */ @@ -106,8 +104,6 @@ export class RoleViewComp extends Component{ } */ export class MessageManager { - static readonly Instance: MessageManager = new MessageManager(); - private events: Map> = new Map(); /** @@ -204,4 +200,6 @@ export class MessageManager { } } } -} \ No newline at end of file +} + +export const message = new MessageManager(); \ No newline at end of file diff --git a/assets/core/common/loader/ResLoader.ts b/assets/core/common/loader/ResLoader.ts index 1c9bf82..a3e0e65 100644 --- a/assets/core/common/loader/ResLoader.ts +++ b/assets/core/common/loader/ResLoader.ts @@ -1,4 +1,4 @@ -import { Asset, AssetManager, Constructor, __private, assetManager, error, js, resources } from "cc"; +import { Asset, AssetManager, Constructor, __private, assetManager, error, js, resources, warn } from "cc"; export type ProgressCallback = __private._cocos_asset_asset_manager_deprecated__LoadProgressCallback; export type CompleteCallback = any; // (error: Error | null, asset: T) => void; (error: Error | null, asset: T[], urls: string[]) => void; @@ -130,7 +130,7 @@ oops.res.load("spine_path", sp.SkeletonData, (err: Error | null, sd: sp.Skeleton return new Promise((resolve, reject) => { this.load(bundleName, paths, type, (err: Error | null, asset: T) => { if (err) { - error(err.message); + warn(err.message); } resolve(asset); }); @@ -333,4 +333,6 @@ oops.res.loadDir("game", onProgressCallback, onCompleteCallback); this.loadByBundleAndArgs(resources, args); } } -} \ No newline at end of file +} + +export const resLoader = new ResLoader(); \ No newline at end of file diff --git a/assets/core/utils/JsonUtil.ts b/assets/core/utils/JsonUtil.ts index 473f639..c1ac73f 100644 --- a/assets/core/utils/JsonUtil.ts +++ b/assets/core/utils/JsonUtil.ts @@ -6,7 +6,7 @@ */ import { JsonAsset } from "cc"; -import { oops } from "../Oops"; +import { resLoader } from "../common/loader/ResLoader"; /** 资源路径 */ var path: string = "config/game/"; @@ -35,7 +35,7 @@ export class JsonUtil { callback(data.get(name)); else { var url = path + name; - oops.res.load(url, JsonAsset, (err: Error | null, content: JsonAsset) => { + resLoader.load(url, JsonAsset, (err: Error | null, content: JsonAsset) => { if (err) { console.warn(err.message); callback(null); @@ -59,7 +59,7 @@ export class JsonUtil { } else { var url = path + name; - oops.res.load(url, JsonAsset, (err: Error | null, content: JsonAsset) => { + resLoader.load(url, JsonAsset, (err: Error | null, content: JsonAsset) => { if (err) { console.warn(err.message); resolve(null); @@ -80,6 +80,6 @@ export class JsonUtil { static release(name: string) { var url = path + name; data.delete(name); - oops.res.release(url); + resLoader.release(url); } } \ No newline at end of file diff --git a/assets/core/utils/ViewUtil.ts b/assets/core/utils/ViewUtil.ts index f0afa15..36ab0b8 100644 --- a/assets/core/utils/ViewUtil.ts +++ b/assets/core/utils/ViewUtil.ts @@ -5,7 +5,7 @@ * @LastEditTime: 2023-01-19 14:52:12 */ import { Animation, AnimationClip, EventTouch, instantiate, Node, Prefab, Size, UITransform, v3, Vec3 } from "cc"; -import { oops } from "../Oops"; +import { resLoader } from "../common/loader/ResLoader"; /** 显示对象工具 */ export class ViewUtil { @@ -92,7 +92,7 @@ export class ViewUtil { * @param path 资源路径 */ static createPrefabNode(path: string): Node { - var p: Prefab = oops.res.get(path, Prefab)!; + var p: Prefab = resLoader.get(path, Prefab)!; var n = instantiate(p); return n; } @@ -103,7 +103,7 @@ export class ViewUtil { */ static createPrefabNodeAsync(path: string): Promise { return new Promise(async (resolve, reject) => { - oops.res.load(path, Prefab, (err: Error | null, content: Prefab) => { + resLoader.load(path, Prefab, (err: Error | null, content: Prefab) => { if (err) { console.error(`名为【${path}】的资源加载失败`); return; @@ -132,7 +132,7 @@ export class ViewUtil { anim = node.addComponent(Animation); } - var clip = oops.res.get(path, AnimationClip) as AnimationClip; + var clip = resLoader.get(path, AnimationClip) as AnimationClip; if (!clip) { return; } diff --git a/assets/libs/animator-effect/EffectFinishedRelease.ts b/assets/libs/animator-effect/EffectFinishedRelease.ts index 7e75e51..4127645 100644 --- a/assets/libs/animator-effect/EffectFinishedRelease.ts +++ b/assets/libs/animator-effect/EffectFinishedRelease.ts @@ -6,8 +6,8 @@ */ import { Animation, Component, ParticleSystem, _decorator, sp } from 'cc'; -import { oops } from '../../core/Oops'; import { EffectEvent } from './EffectEvent'; +import { message } from '../../core/common/event/MessageManager'; const { ccclass, property } = _decorator; @@ -63,6 +63,6 @@ export class EffectFinishedRelease extends Component { } private onRecovery() { - if (this.node.parent) oops.message.dispatchEvent(EffectEvent.Put, this.node); + if (this.node.parent) message.dispatchEvent(EffectEvent.Put, this.node); } } diff --git a/assets/libs/animator-effect/EffectSingleCase.ts b/assets/libs/animator-effect/EffectSingleCase.ts index 26d9a3a..268f79c 100644 --- a/assets/libs/animator-effect/EffectSingleCase.ts +++ b/assets/libs/animator-effect/EffectSingleCase.ts @@ -4,8 +4,9 @@ * @LastEditors: dgflash * @LastEditTime: 2023-03-06 14:40:34 */ -import { Animation, Component, Node, NodePool, ParticleSystem, Prefab, Vec3, sp } from 'cc'; -import { oops } from '../../core/Oops'; +import { Animation, Component, Node, NodePool, ParticleSystem, Prefab, sp, Vec3 } from 'cc'; +import { message } from '../../core/common/event/MessageManager'; +import { resLoader } from '../../core/common/loader/ResLoader'; import { ViewUtil } from '../../core/utils/ViewUtil'; import { EffectEvent } from './EffectEvent'; import { EffectFinishedRelease } from './EffectFinishedRelease'; @@ -59,7 +60,7 @@ export class EffectSingleCase { private res: Map = new Map(); constructor() { - oops.message.on(EffectEvent.Put, this.onPut, this); + message.on(EffectEvent.Put, this.onPut, this); } private onPut(event: string, node: Node) { @@ -72,25 +73,19 @@ export class EffectSingleCase { * @param parent 父节点 * @param pos 位置 */ - loadAndShow(path: string, parent?: Node, params?: IEffectParams): Promise { + async loadAndShow(path: string, parent?: Node, params?: IEffectParams): Promise { return new Promise(async (resolve, reject) => { var np = this.effects.get(path); if (np == undefined) { // 记录显示对象资源 this.res.set(path, true); - oops.res.load(path, Prefab, (err: Error | null, prefab: Prefab) => { - if (err) { - console.error(`名为【${path}】的特效资源加载失败`); - return; - } - - var node = this.show(path, parent, params); - resolve(node); - }); + await resLoader.loadAsync(path, Prefab); + const node = this.show(path, parent, params); + resolve(node); } else { - var node = this.show(path, parent, params); + const node = this.show(path, parent, params); resolve(node); } }); @@ -180,12 +175,12 @@ export class EffectSingleCase { release(path?: string) { if (path) { this.clear(path); - oops.res.release(path); + resLoader.release(path); } else { this.clear(); this.res.forEach((value: boolean, path: string) => { - oops.res.release(path); + resLoader.release(path); }); } } diff --git a/assets/libs/gui/language/Language.ts b/assets/libs/gui/language/Language.ts index 7d9e3ed..5128a81 100644 --- a/assets/libs/gui/language/Language.ts +++ b/assets/libs/gui/language/Language.ts @@ -1,17 +1,10 @@ -import { EventDispatcher } from "../../../core/common/event/EventDispatcher"; import { Logger } from "../../../core/common/log/Logger"; import { LanguageData } from "./LanguageData"; import { LanguagePack } from "./LanguagePack"; -export enum LanguageEvent { - /** 语种变化事件 */ - CHANGE = 'LanguageEvent.CHANGE', - /** 语种资源释放事件 */ - RELEASE_RES = "LanguageEvent.RELEASE_RES" -} - -export class LanguageManager extends EventDispatcher { - private _languages: Array = ["zh", "en", "tr"]; // 支持的语言 +/** 多语言管理器 */ +export class LanguageManager { + private _languages: Array = ["zh", "en", "tr"]; // 支持的语言 private _languagePack: LanguagePack = new LanguagePack(); // 语言包 private _defaultLanguage: string = "zh"; // 默认语言 @@ -38,13 +31,16 @@ export class LanguageManager extends EventDispatcher { return this._languagePack; } + /** + * 是否存在指定语言 + * @param lang 语言名 + * @returns 存在返回true,则否false + */ isExist(lang: string): boolean { return this.languages.indexOf(lang) > -1; } - /** - * 获取下一个语种 - */ + /** 获取下一个语种 */ getNextLang(): string { let supportLangs = this.languages; let index = supportLangs.indexOf(LanguageData.current); @@ -53,8 +49,9 @@ export class LanguageManager extends EventDispatcher { } /** - * 改变语种,会自动下载对应的语种,下载完成回调 - * @param language + * 改变语种,会自动下载对应的语种 + * @param language 语言名 + * @param callback 多语言资源数据加载完成回调 */ setLanguage(language: string, callback: (success: boolean) => void) { if (language == null || language == "") { @@ -77,9 +74,10 @@ export class LanguageManager extends EventDispatcher { this.loadLanguageAssets(language, (lang: string) => { Logger.logConfig(`当前语言为【${language}】`); + var oldLanguage = LanguageData.current; LanguageData.current = language; this._languagePack.updateLanguage(language); - this.dispatchEvent(LanguageEvent.CHANGE, lang); + this._languagePack.releaseLanguageAssets(oldLanguage); callback(true); }); } @@ -111,6 +109,5 @@ export class LanguageManager extends EventDispatcher { releaseLanguageAssets(lang: string) { lang = lang.toLowerCase(); this._languagePack.releaseLanguageAssets(lang); - this.dispatchEvent(LanguageEvent.RELEASE_RES, lang); } } \ No newline at end of file diff --git a/assets/libs/gui/language/LanguageData.ts b/assets/libs/gui/language/LanguageData.ts index b014dd3..ff469c8 100644 --- a/assets/libs/gui/language/LanguageData.ts +++ b/assets/libs/gui/language/LanguageData.ts @@ -1,3 +1,5 @@ +import { TTFFont } from "cc"; + /* * @Author: dgflash * @Date: 2022-02-11 09:31:52 @@ -5,12 +7,21 @@ * @LastEditTime: 2023-08-22 16:37:40 */ export class LanguageData { + /** JSON资源目录 */ + static path_json: string = "language/json"; + /** 纹理资源目录 */ + static path_texture: string = "language/texture"; + /** SPINE资源目录 */ + static path_spine: string = "language/spine"; + /** 当前语言 */ static current: string = ""; /** 语言JSON配置数据 */ static json: any = {} /** 语言EXCEL中的配置数据 */ static excel: any = null!; + /** TTF字体 */ + static font: TTFFont = null!; /** * 通过多语言关键字获取语言文本 diff --git a/assets/libs/gui/language/LanguageLabel.ts b/assets/libs/gui/language/LanguageLabel.ts index e4324d8..e8281ba 100644 --- a/assets/libs/gui/language/LanguageLabel.ts +++ b/assets/libs/gui/language/LanguageLabel.ts @@ -1,6 +1,5 @@ import { CCString, Component, Label, RichText, TTFFont, _decorator, warn } from "cc"; import { EDITOR } from "cc/env"; -import { oops } from "../../../core/Oops"; import { LanguageData } from "./LanguageData"; const { ccclass, property, menu } = _decorator; @@ -109,8 +108,7 @@ export class LanguageLabel extends Component { updateContent() { var label = this.getComponent(Label); var richtext = this.getComponent(RichText); - var path = oops.language.pack.json + "/" + oops.language.current; - var font: TTFFont | null = oops.res.get(path, TTFFont); + var font: TTFFont | null = LanguageData.font if (label) { if (font && !label.useSystemFont) { diff --git a/assets/libs/gui/language/LanguagePack.ts b/assets/libs/gui/language/LanguagePack.ts index b520214..bb7231d 100644 --- a/assets/libs/gui/language/LanguagePack.ts +++ b/assets/libs/gui/language/LanguagePack.ts @@ -4,9 +4,9 @@ * @LastEditors: dgflash * @LastEditTime: 2023-08-22 16:34:28 */ -import { director, error, JsonAsset, TTFFont, warn } from "cc"; +import { director, error, JsonAsset, TTFFont } from "cc"; +import { resLoader } from "../../../core/common/loader/ResLoader"; import { Logger } from "../../../core/common/log/Logger"; -import { oops } from "../../../core/Oops"; import { JsonUtil } from "../../../core/utils/JsonUtil"; import { LanguageData } from "./LanguageData"; import { LanguageLabel } from "./LanguageLabel"; @@ -14,13 +14,6 @@ import { LanguageSpine } from "./LanguageSpine"; import { LanguageSprite } from "./LanguageSprite"; export class LanguagePack { - /** JSON资源目录 */ - json: string = "language/json"; - /** 纹理资源目录 */ - texture: string = "language/texture"; - /** SPINE资源目录 */ - spine: string = "language/spine"; - /** * 刷新语言文字 * @param lang @@ -76,8 +69,8 @@ export class LanguagePack { /** 纹理多语言资源 */ private loadTexture(lang: string) { return new Promise((resolve, reject) => { - let path = `${this.texture}/${lang}`; - oops.res.loadDir(path, (err: any, assets: any) => { + const path = `${LanguageData.path_texture}/${lang}`; + resLoader.loadDir(path, (err: any, assets: any) => { if (err) { error(err); resolve(null); @@ -85,38 +78,37 @@ export class LanguagePack { } Logger.logConfig(path, "下载语言包 textures 资源"); resolve(null); - }) + }); }); } /** Json格式多语言资源 */ private loadJson(lang: string) { - return new Promise((resolve, reject) => { - let path = `${this.json}/${lang}`; - oops.res.load(path, JsonAsset, (err: Error | null, asste: JsonAsset) => { - if (err) { - error(err); - resolve(null); - return; - } - - LanguageData.json = asste.json; + return new Promise(async (resolve, reject) => { + const path = `${LanguageData.path_json}/${lang}`; + const jsonAsset = await resLoader.loadAsync(path, JsonAsset); + if (jsonAsset) { + LanguageData.json = jsonAsset.json; Logger.logConfig(path, "下载语言包 json 资源"); + } + else { + resolve(null); + return; + } - oops.res.load(path, TTFFont, (err: Error | null) => { - if (err == null) Logger.logConfig(path, "下载语言包 ttf 资源"); - - resolve(null); - }); - }) + resLoader.load(path, TTFFont, (err: Error | null, font: TTFFont) => { + if (err == null) Logger.logConfig(path, "下载语言包 ttf 资源"); + LanguageData.font = font; + resolve(null); + }); }); } /** SPINE动画多语言资源 */ private loadSpine(lang: string) { - return new Promise((resolve, reject) => { - let path = `${this.spine}/${lang}`; - oops.res.loadDir(path, (err: any, assets: any) => { + return new Promise(async (resolve, reject) => { + const path = `${LanguageData.path_spine}/${lang}`; + resLoader.loadDir(path, (err: any, assets: any) => { if (err) { error(err); resolve(null); @@ -133,16 +125,21 @@ export class LanguagePack { * @param lang */ releaseLanguageAssets(lang: string) { - let langTexture = `${this.texture}/${lang}`; - oops.res.releaseDir(langTexture); - Logger.logView(langTexture, "释放语言 texture 资源"); + let langTexture = `${LanguageData.path_texture}/${lang}`; + resLoader.releaseDir(langTexture); - let langJson = `${this.json}/${lang}`; - oops.res.release(langJson); - Logger.logView(langJson, "释放语言文字资源"); + let langJson = `${LanguageData.path_json}/${lang}`; + let json = resLoader.get(langJson, JsonAsset); + if (json) { + json.decRef(); + } - let langSpine = `${this.spine}/${lang}`; - oops.res.release(langSpine); - Logger.logView(langSpine, "释放语言 spine 资源"); + let font = resLoader.get(langJson, TTFFont); + if (font) { + font.decRef(); + } + + let langSpine = `${LanguageData.path_spine}/${lang}`; + resLoader.release(langSpine); } } \ No newline at end of file diff --git a/assets/libs/gui/language/LanguageSpine.ts b/assets/libs/gui/language/LanguageSpine.ts index 8e398d6..b9fd84e 100644 --- a/assets/libs/gui/language/LanguageSpine.ts +++ b/assets/libs/gui/language/LanguageSpine.ts @@ -6,7 +6,7 @@ */ import { CCString, Component, _decorator, sp } from "cc"; import { EDITOR } from "cc/env"; -import { oops } from "../../../core/Oops"; +import { resLoader } from "../../../core/common/loader/ResLoader"; import { LanguageData } from "./LanguageData"; const { ccclass, property, menu } = _decorator; @@ -47,7 +47,7 @@ export class LanguageSpine extends Component { private updateSpine() { // 获取语言标记 let path = `language/spine/${LanguageData.current}/${this.dataID}`; - let res: sp.SkeletonData | null = oops.res.get(path, sp.SkeletonData); + let res: sp.SkeletonData | null = resLoader.get(path, sp.SkeletonData); if (res) { let spine: sp.Skeleton = this.getComponent(sp.Skeleton)!; spine.skeletonData = res; diff --git a/assets/libs/gui/language/LanguageSprite.ts b/assets/libs/gui/language/LanguageSprite.ts index b8f6e05..e5464d2 100644 --- a/assets/libs/gui/language/LanguageSprite.ts +++ b/assets/libs/gui/language/LanguageSprite.ts @@ -6,7 +6,7 @@ */ import { CCString, Component, Size, Sprite, SpriteFrame, UITransform, _decorator } from "cc"; import { EDITOR } from "cc/env"; -import { oops } from "../../../core/Oops"; +import { resLoader } from "../../../core/common/loader/ResLoader"; import { LanguageData } from "./LanguageData"; const { ccclass, property, menu } = _decorator; @@ -44,7 +44,7 @@ export class LanguageSprite extends Component { private updateSprite() { // 获取语言标记 let path = `language/texture/${LanguageData.current}/${this.dataID}/spriteFrame`; - let res: SpriteFrame | null = oops.res.get(path, SpriteFrame); + let res: SpriteFrame | null = resLoader.get(path, SpriteFrame); if (res) { let spcomp: Sprite = this.getComponent(Sprite)!; spcomp.spriteFrame = res;