废弃core.scene更改为setscene方法

This commit is contained in:
YHH
2025-08-12 11:08:27 +08:00
parent 86cb70a94f
commit 56dd18b983
13 changed files with 96 additions and 85 deletions
+1 -1
View File
@@ -54,7 +54,7 @@ import { Core, Scene, Entity, Component, EntitySystem, Matcher, Time } from '@es
// 创建核心实例
const core = Core.create({ debug: true });
const scene = new Scene();
Core.scene = scene;
Core.setScene(scene);
// 定义组件
class PositionComponent extends Component {
+1 -1
View File
@@ -107,7 +107,7 @@ const scene = new Scene();
scene.name = "GameScene";
// 设置为当前场景
Core.scene = scene;
Core.setScene(scene;
// 场景生命周期
scene.begin(); // 开始场景
+4 -4
View File
@@ -189,7 +189,7 @@ class LayaECSGame extends LayaScene {
this.ecsScene = new ECSScene();
this.ecsScene.name = "LayaGameScene";
Core.scene = this.ecsScene;
Core.setScene(this.ecsScene);
this.entityManager = new EntityManager();
this.setupSystems();
@@ -264,7 +264,7 @@ export class ECSGameManager extends CocosComponent {
this.ecsScene = new ECSScene();
this.ecsScene.name = "CocosGameScene";
Core.scene = this.ecsScene;
Core.setScene(this.ecsScene);
this.entityManager = new EntityManager();
this.setupSystems();
@@ -340,7 +340,7 @@ class ServerGameManager {
this.scene = new Scene();
this.scene.name = "ServerScene";
Core.scene = this.scene;
Core.setScene(this.scene);
this.entityManager = new EntityManager();
this.setupSystems();
@@ -434,7 +434,7 @@ class BrowserGame {
this.scene = new Scene();
this.scene.name = "BrowserScene";
Core.scene = this.scene;
Core.setScene(this.scene);
this.entityManager = new EntityManager();
this.setupSystems();
+11 -9
View File
@@ -19,10 +19,12 @@ import { Scene, Core } from '@esengine/ecs-framework';
// 创建场景
const gameScene = new Scene();
// 设置为当前活动场景
Core.scene = gameScene;
// 设置为当前活动场景(推荐使用setScene方法)
Core.setScene(gameScene);
```
> **注意**: `Core.scene = ` 设置方式已被标记为废弃,推荐使用 `Core.setScene()` 方法。新方法提供更好的类型安全性和可预测的激活时序。
### 场景的生命周期
```typescript
@@ -113,7 +115,7 @@ class MenuScene extends Scene {
private transitionToGame() {
// 切换到游戏场景
const gameScene = new GameScene();
Core.scene = gameScene;
Core.setScene(gameScene);
}
}
```
@@ -251,7 +253,7 @@ class SceneManager {
// 创建新场景
this.currentScene = this.createScene(sceneType, data);
Core.scene = this.currentScene;
Core.setScene(this.currentScene);
console.log(`切换到场景: ${sceneType}`);
}
@@ -265,7 +267,7 @@ class SceneManager {
}
this.currentScene = previousScene;
Core.scene = this.currentScene;
Core.setScene(this.currentScene);
return true;
}
return false;
@@ -280,7 +282,7 @@ class SceneManager {
}
this.currentScene = this.createScene(sceneType, data);
Core.scene = this.currentScene;
Core.setScene(this.currentScene);
}
popScene() {
@@ -291,7 +293,7 @@ class SceneManager {
this.currentScene = this.sceneHistory.pop()!;
this.resumeScene(this.currentScene);
Core.scene = this.currentScene;
Core.setScene(this.currentScene);
}
}
@@ -359,7 +361,7 @@ class TransitionManager {
// 切换场景
fromScene.onDestroy();
Core.scene = toScene;
Core.setScene(toScene);
// 淡入新场景
await this.fadeIn(overlay, duration / 2);
@@ -382,7 +384,7 @@ class TransitionManager {
// 切换场景
fromScene.onDestroy();
Core.scene = toScene;
Core.setScene(toScene);
// 从相反方向滑入新场景
await this.slideScene(toScene, -slideDistance);
+1 -1
View File
@@ -491,7 +491,7 @@ if (renderSystem) {
}
// 设置为当前场景
Core.scene = scene;
Core.setScene(scene;
```
### 系统的启用和禁用
@@ -71,7 +71,7 @@ export class ECSManager extends Component {
const gameScene = new GameScene();
// 3. 设置为当前场景(会自动调用scene.begin()
Core.scene = gameScene;
Core.setScene(gameScene);
this.isInitialized = true;
// ECS框架初始化完成
+2 -2
View File
@@ -11400,7 +11400,7 @@
},
"packages/core": {
"name": "@esengine/ecs-framework",
"version": "2.1.31",
"version": "2.1.34",
"license": "MIT",
"devDependencies": {
"@rollup/plugin-commonjs": "^28.0.3",
@@ -11532,7 +11532,7 @@
},
"packages/network-shared": {
"name": "@esengine/ecs-framework-network-shared",
"version": "1.0.14",
"version": "1.0.15",
"license": "MIT",
"dependencies": {
"protobufjs": "^7.5.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@esengine/ecs-framework",
"version": "2.1.31",
"version": "2.1.34",
"description": "用于Laya、Cocos Creator等JavaScript游戏引擎的高性能ECS框架",
"type": "module",
"main": "bin/index.js",
+31 -4
View File
@@ -205,11 +205,23 @@ export class Core {
}
/**
*
*
*
* @deprecated 使 Core.setScene() scene setter
* setScene()
*
*
* ```typescript
* // 旧方式(已废弃)
* Core.scene = myScene;
*
* // 新方式(推荐)
* Core.setScene(myScene);
* ```
*
*
*
* @param value -
* @param value -
*/
public static set scene(value: IScene | null) {
if (!value) return;
@@ -222,10 +234,24 @@ export class Core {
}
/**
*
*
*
*
* scene setter
*
*
*
* @param scene -
* @returns
* @returns 便
*
* @example
* ```typescript
* const myScene = new MyScene();
* Core.setScene(myScene);
*
* // 链式调用
* const scene = Core.setScene(new MyScene()).addSystem(new MySystem());
* ```
*/
public static setScene<T extends IScene>(scene: T): T {
if (this._instance._scene == null) {
@@ -447,6 +473,7 @@ export class Core {
private setSceneInternal(scene: IScene): void {
this._scene = scene;
this.onSceneChanged();
this._scene.initialize();
this._scene.begin();
}
+1 -5
View File
@@ -16,7 +16,7 @@ export interface IScene {
/**
*
*/
readonly name: string;
name: string;
/**
*
@@ -147,10 +147,6 @@ export interface ISceneConfig {
*
*/
name?: string;
/**
*
*/
autoStart?: boolean;
/**
*
*/
-56
View File
@@ -14,27 +14,6 @@ import { IScene, ISceneConfig } from './IScene';
*
* IScene接口
* 使
*
* @example
* ```typescript
* // 推荐的组合方式
* class GameScene implements IScene {
* private scene = new Scene();
*
* public initialize(): void {
* this.scene.initialize();
* // 自定义初始化逻辑
* }
* }
*
* // 仍然支持继承方式
* class GameScene extends Scene {
* public initialize(): void {
* super.initialize();
* // 自定义逻辑
* }
* }
* ```
*/
export class Scene implements IScene {
/**
@@ -98,10 +77,6 @@ export class Scene implements IScene {
return this.entityProcessors.processors;
}
/**
*
*/
private _isBaseInitialized = false;
/**
*
@@ -128,16 +103,6 @@ export class Scene implements IScene {
this.eventSystem.emitSync('component:added', data);
});
}
// 标记基础初始化完成
this._isBaseInitialized = true;
// 立即调用初始化,但确保在基础设施就绪后
this.initialize();
if (config?.autoStart) {
this.begin();
}
}
/**
@@ -284,27 +249,6 @@ export class Scene implements IScene {
return entities;
}
/**
*
* @param count
* @param namePrefix
* @returns
*/
public createEntitiesOld(count: number, namePrefix: string = "Entity"): Entity[] {
const entities: Entity[] = [];
// 批量创建实体,延迟缓存清理
for (let i = 0; i < count; i++) {
const entity = new Entity(`${namePrefix}_${i}`, this.identifierPool.checkOut());
entities.push(entity);
this.addEntity(entity, true); // 延迟缓存清理
}
// 最后统一清理缓存
this.querySystem.clearCache();
return entities;
}
/**
*
+8
View File
@@ -137,6 +137,14 @@ describe('Core - 核心管理系统测试', () => {
expect(testScene.beginCalled).toBe(true);
});
test('应该能够使用推荐的setScene方法设置场景', () => {
const scene = Core.setScene(testScene);
expect(Core.scene).toBe(testScene);
expect(testScene.beginCalled).toBe(true);
expect(scene).toBe(testScene); // 应该返回场景实例
});
test('设置新场景应该触发场景切换', () => {
const firstScene = new TestScene();
const secondScene = new TestScene();
+34
View File
@@ -142,6 +142,27 @@ describe('Scene - 场景管理系统测试', () => {
expect(scene.entities.count).toBe(0);
expect(scene.entityProcessors.count).toBe(0);
});
test('应该能够使用配置创建场景', () => {
const configScene = new Scene({ name: "ConfigScene" });
expect(configScene.name).toBe("ConfigScene");
});
test('应该能够获取调试信息', () => {
scene.name = "DebugScene";
scene.createEntity("TestEntity");
scene.addEntityProcessor(new MovementSystem());
const debugInfo = scene.getDebugInfo();
expect(debugInfo.name).toBe("Scene");
expect(debugInfo.entityCount).toBe(1);
expect(debugInfo.processorCount).toBe(1);
expect(debugInfo.isRunning).toBe(false);
expect(debugInfo.entities).toBeDefined();
expect(debugInfo.processors).toBeDefined();
expect(debugInfo.componentStats).toBeDefined();
});
});
describe('实体管理', () => {
@@ -446,6 +467,19 @@ describe('Scene - 场景管理系统测试', () => {
expect(stats.queryStats.totalQueries).toBeGreaterThan(0);
expect(parseFloat(stats.cacheStats.hitRate)).toBeGreaterThanOrEqual(0);
});
test('应该能够压缩组件存储', () => {
// 创建一些实体和组件
const entities = scene.createEntities(10, "Entity");
entities.forEach(entity => {
entity.addComponent(new PositionComponent(Math.random() * 100, Math.random() * 100));
});
// 压缩组件存储应该不抛出异常
expect(() => {
scene.compactComponentStorage();
}).not.toThrow();
});
});
describe('内存管理和性能', () => {