From 781550d0061720f24e85a8b52f8d48180d8d4f54 Mon Sep 17 00:00:00 2001 From: dgflash Date: Wed, 21 May 2025 14:11:13 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=9B=BE=E7=89=87=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=86=85=E5=AD=98=E8=87=AA=E5=8A=A8=E5=8C=96=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/core/common/loader/ResLoader.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/assets/core/common/loader/ResLoader.ts b/assets/core/common/loader/ResLoader.ts index 8489f6e..0411cff 100644 --- a/assets/core/common/loader/ResLoader.ts +++ b/assets/core/common/loader/ResLoader.ts @@ -105,6 +105,15 @@ oops.res.loadRemote(this.url, opt, onComplete); //#endregion //#region 资源包管理 + + /** + * 获取资源包 + * @param name 资源包名 + */ + getBundle(name: string) { + return assetManager.bundles.get(name); + } + /** * 加载资源包 * @param name 资源地址 -- Gitee From e935566dd4b8ff3776c6a9c72f405c23f71d104d Mon Sep 17 00:00:00 2001 From: dgflash Date: Wed, 21 May 2025 14:20:11 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E5=9B=BE=E7=89=87=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=86=85=E5=AD=98=E8=87=AA=E5=8A=A8=E5=8C=96=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/module/common/GameComponent.ts | 34 ++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/assets/module/common/GameComponent.ts b/assets/module/common/GameComponent.ts index 2bb99be..235a26e 100644 --- a/assets/module/common/GameComponent.ts +++ b/assets/module/common/GameComponent.ts @@ -26,10 +26,13 @@ interface ResRecord { bundle: string, /** 资源路径 */ path: string, + /** 引用计数 */ + refCount: number, /** 资源编号 */ resId?: number } + /** * 游戏显示对象组件模板 * 1、当前对象加载的资源,会在对象释放时,自动释放引用的资源 @@ -148,8 +151,12 @@ export class GameComponent extends Component { for (let index = 0; index < paths.length; index++) { let realPath = paths[index]; let key = this.getResKey(realBundle, realPath, resId); - if (!rps.has(key)) { - rps.set(key, { path: realPath, bundle: realBundle, resId: resId }); + let rp = rps.get(key); + if (rp) { + rp.refCount++; + } + else { + rps.set(key, { path: realPath, bundle: realBundle, refCount: 1, resId: resId }); } } } @@ -157,16 +164,24 @@ export class GameComponent extends Component { let realBundle = bundleName; let realPath = paths; let key = this.getResKey(realBundle, realPath, resId); - if (!rps.has(key)) { - rps.set(key, { path: realPath, bundle: realBundle, resId: resId }); + let rp = rps.get(key); + if (rp) { + rp.refCount++; + } + else { + rps.set(key, { path: realPath, bundle: realBundle, refCount: 1, resId: resId }); } } else { let realBundle = oops.res.defaultBundleName; let realPath = bundleName; let key = this.getResKey(realBundle, realPath, resId); - if (!rps.has(key)) { - rps.set(key, { path: realPath, bundle: realBundle, resId: resId }); + let rp = rps.get(key); + if (rp) { + rp.refCount++; + } + else { + rps.set(key, { path: realPath, bundle: realBundle, refCount: 1, resId: resId }); } } } @@ -265,7 +280,9 @@ export class GameComponent extends Component { const rps = this.resPaths.get(ResType.Load); if (rps) { rps.forEach((value: ResRecord) => { - oops.res.release(value.path, value.bundle); + for (let i = 0; i < value.refCount; i++) { + oops.res.release(value.path, value.bundle); + } }); rps.clear(); } @@ -313,6 +330,7 @@ export class GameComponent extends Component { } return; } + spriteFrame.addRef(); target.spriteFrame = spriteFrame; } //#endregion @@ -348,7 +366,7 @@ export class GameComponent extends Component { if (bundleName == null) bundleName = oops.res.defaultBundleName; await oops.audio.playEffect(url, bundleName, () => { if (!this.isValid) return; - + const rps = this.resPaths.get(ResType.Audio); if (rps) { const key = this.getResKey(bundleName, url); -- Gitee From c2470f69b352cdf3e91e732fd7a1243a2db8b763 Mon Sep 17 00:00:00 2001 From: dgflash Date: Thu, 22 May 2025 10:06:06 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=9F=B3=E6=95=88?= =?UTF-8?q?=E6=B1=A0=E4=B8=AD=E8=B5=84=E6=BA=90=E9=87=8A=E6=94=BE=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/core/common/audio/AudioEffectPool.ts | 2 +- assets/core/common/loader/ResLoader.ts | 51 +++++++++++++++++++-- assets/module/common/GameComponent.ts | 6 +-- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/assets/core/common/audio/AudioEffectPool.ts b/assets/core/common/audio/AudioEffectPool.ts index e4f3a71..5c740e7 100644 --- a/assets/core/common/audio/AudioEffectPool.ts +++ b/assets/core/common/audio/AudioEffectPool.ts @@ -157,7 +157,7 @@ export class AudioEffectPool { // 释放音效资源 this.res.forEach((urls: string[], bundleName: string) => { - urls.forEach(url => resLoader.release(bundleName, url)); + urls.forEach(url => resLoader.release(url, bundleName)); }); // 释放池中播放器 diff --git a/assets/core/common/loader/ResLoader.ts b/assets/core/common/loader/ResLoader.ts index 0411cff..503346d 100644 --- a/assets/core/common/loader/ResLoader.ts +++ b/assets/core/common/loader/ResLoader.ts @@ -1,4 +1,5 @@ -import { __private, Asset, AssetManager, assetManager, error, js, resources, warn } from "cc"; +import { AudioClip } from "cc"; +import { __private, Asset, AssetManager, assetManager, error, ImageAsset, js, JsonAsset, Prefab, resources, SpriteFrame, Texture2D, warn } from "cc"; export type AssetType = __private.__types_globals__Constructor | null; export type Paths = string | string[]; @@ -364,7 +365,7 @@ oops.res.loadDir("game", onProgressCallback, onCompleteCallback); if (bundle) { const asset = bundle.get(path); if (asset) { - this.releasePrefabtDepsRecursively(asset); + this.releasePrefabtDepsRecursively(bundleName, asset); } } } @@ -380,7 +381,7 @@ oops.res.loadDir("game", onProgressCallback, onCompleteCallback); var infos = bundle.getDirWithPath(path); if (infos) { infos.map((info) => { - this.releasePrefabtDepsRecursively(info.uuid); + this.releasePrefabtDepsRecursively(bundleName, info.uuid); }); } @@ -390,17 +391,59 @@ oops.res.loadDir("game", onProgressCallback, onCompleteCallback); } } + /** + * 获取资源路径 + * @param bundleName 资源包名 + * @param uuid 资源唯一编号 + * @returns + */ + getAssetPath(bundleName: string, uuid: string): string { + let b = this.getBundle(bundleName)!; + let info = b.getAssetInfo(uuid)!; + //@ts-ignore + return info.path; + } + /** 释放预制依赖资源 */ - private releasePrefabtDepsRecursively(uuid: string | Asset) { + private releasePrefabtDepsRecursively(bundleName: string, uuid: string | Asset) { if (uuid instanceof Asset) { uuid.decRef(); // assetManager.releaseAsset(uuid); + this.debugLogReleasedAsset(bundleName, uuid); } else { const asset = assetManager.assets.get(uuid); if (asset) { asset.decRef(); // assetManager.releaseAsset(asset); + this.debugLogReleasedAsset(bundleName, asset); + } + } + } + + private debugLogReleasedAsset(bundleName: string, asset: Asset) { + if (asset.refCount == 0) { + let path = this.getAssetPath(bundleName, asset.uuid); + if (asset instanceof JsonAsset) { + console.log("释放资源 - Json", path); + } + else if (asset instanceof Prefab) { + console.log("释放资源 - Prefab", path); + } + else if (asset instanceof SpriteFrame) { + console.log("释放资源 - SpriteFrame", path); + } + else if (asset instanceof Texture2D) { + console.log("释放资源 - Texture2D", path); + } + else if (asset instanceof ImageAsset) { + console.log("释放资源 - ImageAsset", path); + } + else if (asset instanceof AudioClip) { + console.log("释放资源 - AudioClip", path); + } + else { + console.log("释放资源 - 未知", path); } } } diff --git a/assets/module/common/GameComponent.ts b/assets/module/common/GameComponent.ts index 235a26e..68f02c5 100644 --- a/assets/module/common/GameComponent.ts +++ b/assets/module/common/GameComponent.ts @@ -307,7 +307,7 @@ export class GameComponent extends Component { const rps = this.resPaths.get(ResType.Audio); if (rps) { rps.forEach((value: ResRecord) => { - oops.audio.putEffect(value.resId!, value.path, value.bundle); + oops.audio.putEffect(value.resId!, value.path, value.bundle); // 回收音乐效到音效池中等下次使用 }); } } @@ -364,7 +364,7 @@ export class GameComponent extends Component { */ async playEffect(url: string, bundleName?: string) { if (bundleName == null) bundleName = oops.res.defaultBundleName; - await oops.audio.playEffect(url, bundleName, () => { + let resId = await oops.audio.playEffect(url, bundleName, () => { if (!this.isValid) return; const rps = this.resPaths.get(ResType.Audio); @@ -373,7 +373,7 @@ export class GameComponent extends Component { rps.delete(key); } }); - this.addPathToRecord(ResType.Audio, bundleName, url); + this.addPathToRecord(ResType.Audio, bundleName, url, resId); } //#endregion -- Gitee From 9438a651a5baf9930ccf5f6865622512077b1d1c Mon Sep 17 00:00:00 2001 From: dgflash Date: Thu, 22 May 2025 10:22:29 +0800 Subject: [PATCH 04/10] . --- assets/core/common/loader/ResLoader.ts | 38 ++++++++++++++++++-------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/assets/core/common/loader/ResLoader.ts b/assets/core/common/loader/ResLoader.ts index 503346d..b4e4296 100644 --- a/assets/core/common/loader/ResLoader.ts +++ b/assets/core/common/loader/ResLoader.ts @@ -1,5 +1,4 @@ -import { AudioClip } from "cc"; -import { __private, Asset, AssetManager, assetManager, error, ImageAsset, js, JsonAsset, Prefab, resources, SpriteFrame, Texture2D, warn } from "cc"; +import { __private, AnimationClip, Asset, AssetManager, assetManager, AudioClip, error, Font, ImageAsset, js, JsonAsset, Material, Mesh, Prefab, resources, sp, SpriteFrame, Texture2D, warn } from "cc"; export type AssetType = __private.__types_globals__Constructor | null; export type Paths = string | string[]; @@ -409,14 +408,14 @@ oops.res.loadDir("game", onProgressCallback, onCompleteCallback); if (uuid instanceof Asset) { uuid.decRef(); // assetManager.releaseAsset(uuid); - this.debugLogReleasedAsset(bundleName, uuid); + // this.debugLogReleasedAsset(bundleName, uuid); } else { const asset = assetManager.assets.get(uuid); if (asset) { asset.decRef(); // assetManager.releaseAsset(asset); - this.debugLogReleasedAsset(bundleName, asset); + // this.debugLogReleasedAsset(bundleName, asset); } } } @@ -424,27 +423,44 @@ oops.res.loadDir("game", onProgressCallback, onCompleteCallback); private debugLogReleasedAsset(bundleName: string, asset: Asset) { if (asset.refCount == 0) { let path = this.getAssetPath(bundleName, asset.uuid); + let content: string = ""; if (asset instanceof JsonAsset) { - console.log("释放资源 - Json", path); + content = "【释放资源】Json【路径】" + path; } else if (asset instanceof Prefab) { - console.log("释放资源 - Prefab", path); + content = "【释放资源】Prefab【路径】" + path; } else if (asset instanceof SpriteFrame) { - console.log("释放资源 - SpriteFrame", path); + content = "【释放资源】SpriteFrame【路径】" + path; } else if (asset instanceof Texture2D) { - console.log("释放资源 - Texture2D", path); + content = "【释放资源】Texture2D【路径】" + path; } else if (asset instanceof ImageAsset) { - console.log("释放资源 - ImageAsset", path); + content = "【释放资源】ImageAsset【路径】" + path; } else if (asset instanceof AudioClip) { - console.log("释放资源 - AudioClip", path); + content = "【释放资源】AudioClip【路径】" + path; + } + else if (asset instanceof AnimationClip) { + content = "【释放资源】AnimationClip【路径】" + path; + } + else if (asset instanceof Font) { + content = "【释放资源】Font【路径】" + path; + } + else if (asset instanceof Material) { + content = "【释放资源】Material【路径】" + path; + } + else if (asset instanceof Mesh) { + content = "【释放资源】Mesh【路径】" + path; + } + else if (asset instanceof sp.SkeletonData) { + content = "【释放资源】Spine【路径】" + path; } else { - console.log("释放资源 - 未知", path); + content = "【释放资源】未知【路径】" + path; } + console.log(content); } } -- Gitee From 71c91aef96cc895ff18bbff7546bfb6c8f7889f5 Mon Sep 17 00:00:00 2001 From: dgflash Date: Thu, 22 May 2025 10:38:45 +0800 Subject: [PATCH 05/10] . --- assets/core/common/loader/ResLoader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/core/common/loader/ResLoader.ts b/assets/core/common/loader/ResLoader.ts index b4e4296..50b856c 100644 --- a/assets/core/common/loader/ResLoader.ts +++ b/assets/core/common/loader/ResLoader.ts @@ -548,7 +548,7 @@ oops.res.loadDir("game", onProgressCallback, onCompleteCallback); /** 打印缓存中所有资源信息 */ dump() { assetManager.assets.forEach((value: Asset, key: string) => { - console.log(assetManager.assets.get(key)); + console.log(`引用数量:${value.refCount}`, assetManager.assets.get(key)); }) console.log(`当前资源总数:${assetManager.assets.count}`); } -- Gitee From c851b21c70d7baaf461da62d2ad6aefeb865e95c Mon Sep 17 00:00:00 2001 From: dgflash Date: Mon, 26 May 2025 09:26:37 +0800 Subject: [PATCH 06/10] . --- assets/core/utils/PlatformUtil.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/core/utils/PlatformUtil.ts b/assets/core/utils/PlatformUtil.ts index 56be533..d7e950a 100644 --- a/assets/core/utils/PlatformUtil.ts +++ b/assets/core/utils/PlatformUtil.ts @@ -8,7 +8,7 @@ import { __private, native, sys } from "cc"; /** 平台数据 */ export class PlatformUtil { /** 获取当前设备的网络类型, 如果网络类型无法获取,默认将返回 `sys.NetworkType.LAN` */ - getNetworkType(): __private._pal_system_info_enum_type_network_type__NetworkType { + static getNetworkType(): __private._pal_system_info_enum_type_network_type__NetworkType { return sys.getNetworkType(); } @@ -16,17 +16,17 @@ export class PlatformUtil { * 获取当前设备的电池电量,如果电量无法获取,默认将返回 1 * @return - 0.0 ~ 1.0 */ - getBatteryLevel(): number { + static getBatteryLevel(): number { return sys.getBatteryLevel(); } /** 尝试打开一个 web 页面,并非在所有平台都有效 */ - openURL(url: string) { + static openURL(url: string) { sys.openURL(url); } /** 拷贝字符串到剪切板 */ - copyText(text: string) { + static copyText(text: string) { native.copyTextToClipboard(text); } } -- Gitee From 6055facb1ced315dc599890caa0c2f26e11da039 Mon Sep 17 00:00:00 2001 From: dgflash Date: Mon, 26 May 2025 09:30:52 +0800 Subject: [PATCH 07/10] =?UTF-8?q?PlatformUtil.openURL=E6=94=AF=E6=8C=81H5?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=96=87=E6=9C=AC=E6=B7=BB=E5=8A=A0=E5=89=AA?= =?UTF-8?q?=E5=88=87=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/core/utils/PlatformUtil.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/assets/core/utils/PlatformUtil.ts b/assets/core/utils/PlatformUtil.ts index d7e950a..56cef59 100644 --- a/assets/core/utils/PlatformUtil.ts +++ b/assets/core/utils/PlatformUtil.ts @@ -26,7 +26,13 @@ export class PlatformUtil { } /** 拷贝字符串到剪切板 */ - static copyText(text: string) { - native.copyTextToClipboard(text); + static async copyText(text: string) { + if (sys.isNative) { + native.copyTextToClipboard(text); + + } + else { + await navigator.clipboard.writeText(text) + } } } -- Gitee From 60369b6c5cedcfb83f93dab4a469eaac314c87a0 Mon Sep 17 00:00:00 2001 From: dgflash Date: Tue, 17 Jun 2025 16:54:52 +0800 Subject: [PATCH 08/10] =?UTF-8?q?ModuleUtil.removeViewUi=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=E5=AE=8C=E6=88=90=E5=9B=9E=E8=B0=83=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/module/common/ModuleUtil.ts | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/assets/module/common/ModuleUtil.ts b/assets/module/common/ModuleUtil.ts index 43b4d38..f2b10c6 100644 --- a/assets/module/common/ModuleUtil.ts +++ b/assets/module/common/ModuleUtil.ts @@ -2,6 +2,7 @@ import { Node, __private } from "cc"; import { oops } from "../../core/Oops"; import { resLoader } from "../../core/common/loader/ResLoader"; import { UICallbacks } from "../../core/gui/layer/Defines"; +import { DelegateComponent } from "../../core/gui/layer/DelegateComponent"; import { ViewUtil } from "../../core/utils/ViewUtil"; import { ecs } from "../../libs/ecs/ECS"; import { CompType } from "../../libs/ecs/ECSModel"; @@ -81,13 +82,30 @@ export class ModuleUtil { /** * 业务实体上移除界面组件 - * @param ent 模块实体 - * @param ctor 界面逻辑组件 - * @param uiId 界面资源编号 - * @param isDestroy 是否释放界面缓存(默认为释放界面缓存) + * @param ent 模块实体 + * @param ctor 界面逻辑组件 + * @param uiId 界面资源编号 + * @param isDestroy 是否释放界面缓存(默认为释放界面缓存) + * @param onCloseWindow 窗口动画关闭完成事件 */ - static removeViewUi(ent: ecs.Entity, ctor: CompType, uiId: number, isDestroy: boolean = true) { - if (isDestroy) ent.remove(ctor, isDestroy); + static removeViewUi(ent: ecs.Entity, ctor: CompType, uiId: number, isDestroy: boolean = true, onCloseWindow?: Function) { + const node = oops.gui.get(uiId); + if (!node) { + if (onCloseWindow) onCloseWindow(); + return; + } + + const comp = node.getComponent(DelegateComponent); + if (comp) { + comp.onCloseWindow = () => { + ent.remove(ctor, isDestroy); + if (onCloseWindow) onCloseWindow(); + }; + } + else { + ent.remove(ctor, isDestroy); + if (onCloseWindow) onCloseWindow(); + } oops.gui.remove(uiId, isDestroy); } } \ No newline at end of file -- Gitee From 427bbb551d60d466dd3014dd44c75360ba7c0957 Mon Sep 17 00:00:00 2001 From: dgflash Date: Thu, 19 Jun 2025 11:10:21 +0800 Subject: [PATCH 09/10] =?UTF-8?q?DelegateComponent=E6=B7=BB=E5=8A=A0onClos?= =?UTF-8?q?eWindowBefore=E7=AA=97=E5=8F=A3=E5=85=B3=E9=97=AD=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/core/gui/layer/DelegateComponent.ts | 6 ++++++ assets/module/common/ModuleUtil.ts | 13 +++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/assets/core/gui/layer/DelegateComponent.ts b/assets/core/gui/layer/DelegateComponent.ts index 43b6c5e..bd20420 100644 --- a/assets/core/gui/layer/DelegateComponent.ts +++ b/assets/core/gui/layer/DelegateComponent.ts @@ -19,6 +19,8 @@ const EventOnRemoved: string = "onRemoved"; export class DelegateComponent extends Component { /** 视图参数 */ vp: ViewParams = null!; + /** 关闭窗口之前 */ + onCloseWindowBefore: Function = null!; /** 界面关闭回调 - 包括关闭动画播放完(辅助框架内存业务流程使用) */ onCloseWindow: Function = null!; @@ -69,6 +71,10 @@ export class DelegateComponent extends Component { /** 窗口关闭前动画处理完后的回调方法,主要用于释放资源 */ private onBeforeRemoveNext(isDestroy?: boolean) { + if (this.onCloseWindowBefore) { + this.onCloseWindowBefore(); + this.onCloseWindowBefore = null!; + } this.removed(this.vp, isDestroy); } diff --git a/assets/module/common/ModuleUtil.ts b/assets/module/common/ModuleUtil.ts index f2b10c6..9591757 100644 --- a/assets/module/common/ModuleUtil.ts +++ b/assets/module/common/ModuleUtil.ts @@ -86,26 +86,27 @@ export class ModuleUtil { * @param ctor 界面逻辑组件 * @param uiId 界面资源编号 * @param isDestroy 是否释放界面缓存(默认为释放界面缓存) - * @param onCloseWindow 窗口动画关闭完成事件 + * @param onRemoved 窗口关闭完成事件 */ - static removeViewUi(ent: ecs.Entity, ctor: CompType, uiId: number, isDestroy: boolean = true, onCloseWindow?: Function) { + static removeViewUi(ent: ecs.Entity, ctor: CompType, uiId: number, isDestroy: boolean = true, onRemoved?: Function) { const node = oops.gui.get(uiId); if (!node) { - if (onCloseWindow) onCloseWindow(); + if (onRemoved) onRemoved(); return; } const comp = node.getComponent(DelegateComponent); if (comp) { - comp.onCloseWindow = () => { + comp.onCloseWindowBefore = () => { ent.remove(ctor, isDestroy); - if (onCloseWindow) onCloseWindow(); + if (onRemoved) onRemoved(); }; } else { ent.remove(ctor, isDestroy); - if (onCloseWindow) onCloseWindow(); + if (onRemoved) onRemoved(); } + oops.gui.remove(uiId, isDestroy); } } \ No newline at end of file -- Gitee From cc4f2801df6a8da52a0ffd1bee00d55b1718070e Mon Sep 17 00:00:00 2001 From: dgflash Date: Mon, 23 Jun 2025 13:53:41 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/module/common/ModuleUtil.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/assets/module/common/ModuleUtil.ts b/assets/module/common/ModuleUtil.ts index 9591757..3ec7dae 100644 --- a/assets/module/common/ModuleUtil.ts +++ b/assets/module/common/ModuleUtil.ts @@ -97,10 +97,22 @@ export class ModuleUtil { const comp = node.getComponent(DelegateComponent); if (comp) { - comp.onCloseWindowBefore = () => { + if (comp.vp.callbacks.onBeforeRemove) { + comp.onCloseWindowBefore = () => { + ent.remove(ctor, isDestroy); + if (onRemoved) onRemoved(); + }; + } + else if (comp.vp.callbacks.onRemoved) { + comp.onCloseWindow = () => { + ent.remove(ctor, isDestroy); + if (onRemoved) onRemoved(); + }; + } + else { ent.remove(ctor, isDestroy); if (onRemoved) onRemoved(); - }; + } } else { ent.remove(ctor, isDestroy); -- Gitee