From 6242c6daf3217397f4a04b1841f8c6a65177c792 Mon Sep 17 00:00:00 2001 From: LINGYE Date: Sun, 9 Nov 2025 11:32:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(core):=20=E4=BF=AE=E5=A4=8D=20PerformanceMo?= =?UTF-8?q?nitor=20=E6=9C=AA=E9=81=B5=E5=BE=AA=20Core=20debug=20=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E7=9A=84=E9=97=AE=E9=A2=98=20(#219)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Core 传递 debug 配置到 WorldManager - WorldManager 传递 debug 配置到 World - World 在 debug=true 时为 Scene 注册并启用 PerformanceMonitor - new Scene 的情况默认未开启,但暴露了 `performanceMonitor` 由使用者处理 --- packages/core/src/Core.ts | 2 +- packages/core/src/ECS/Scene.ts | 2 +- packages/core/src/ECS/World.ts | 8 ++++++++ packages/core/src/ECS/WorldManager.ts | 3 ++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/core/src/Core.ts b/packages/core/src/Core.ts index 858547ca..f42ba179 100644 --- a/packages/core/src/Core.ts +++ b/packages/core/src/Core.ts @@ -191,7 +191,7 @@ export class Core { }); // 初始化World管理器 - this._worldManager = new WorldManager(this._config.worldManagerConfig); + this._worldManager = new WorldManager({ debug: !!this._config.debug, ...this._config.worldManagerConfig }); this._serviceContainer.registerInstance(WorldManager, this._worldManager); // 初始化插件管理器 diff --git a/packages/core/src/ECS/Scene.ts b/packages/core/src/ECS/Scene.ts index 89f2c2ed..a927656c 100644 --- a/packages/core/src/ECS/Scene.ts +++ b/packages/core/src/ECS/Scene.ts @@ -251,7 +251,7 @@ export class Scene implements IScene { * * 从 ServiceContainer 获取,如果未注册则创建默认实例(向后兼容) */ - private get performanceMonitor(): PerformanceMonitor { + public get performanceMonitor(): PerformanceMonitor { if (!this._performanceMonitor) { this._performanceMonitor = this._services.tryResolve(PerformanceMonitor) ?? new PerformanceMonitor(); } diff --git a/packages/core/src/ECS/World.ts b/packages/core/src/ECS/World.ts index 60f57881..4540f6cd 100644 --- a/packages/core/src/ECS/World.ts +++ b/packages/core/src/ECS/World.ts @@ -1,6 +1,7 @@ import { IScene } from './IScene'; import { Scene } from './Scene'; import { createLogger } from '../Utils/Logger'; +import { PerformanceMonitor } from '../Utils/PerformanceMonitor'; const logger = createLogger('World'); @@ -121,6 +122,13 @@ export class World { // 如果没有提供Scene实例,创建默认Scene const scene = sceneInstance || (new Scene() as unknown as T); + // 如果配置了 debug,为 Scene 注册并启用 PerformanceMonitor + if (this._config.debug) { + const performanceMonitor = new PerformanceMonitor(); + performanceMonitor.enable(); + scene.services.registerInstance(PerformanceMonitor, performanceMonitor); + } + // 设置Scene的标识 if ('id' in scene) { (scene as any).id = sceneId; diff --git a/packages/core/src/ECS/WorldManager.ts b/packages/core/src/ECS/WorldManager.ts index d4930ad0..86ffcd93 100644 --- a/packages/core/src/ECS/WorldManager.ts +++ b/packages/core/src/ECS/WorldManager.ts @@ -108,9 +108,10 @@ export class WorldManager implements IService { throw new Error(`已达到最大World数量限制: ${this._config.maxWorlds}`); } + // 优先级:config.debug > WorldManager.debug > 默认 const worldConfig: IWorldConfig = { name: worldId, - ...(this._config.debug !== undefined && { debug: this._config.debug }), + debug: config?.debug ?? this._config.debug ?? false, ...(config?.maxScenes !== undefined && { maxScenes: config.maxScenes }), ...(config?.autoCleanup !== undefined && { autoCleanup: config.autoCleanup }) };