废弃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

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();
}

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;
/**
* 调试配置
*/

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;
}
/**
* 从场景中删除所有实体