ECS Framework API / SceneManager
Class: SceneManager
Defined in: packages/core/src/ECS/SceneManager.ts:51
单场景管理器
适用场景:
- 单人游戏
- 简单场景切换
- 不需要多World隔离的项目
特点:
- 轻量级,零额外开销
- 简单直观的API
- 支持延迟场景切换
- 自动管理ECS API
Example
// 初始化Core
Core.create({ debug: true });
// 创建场景管理器
const sceneManager = new SceneManager();
// 设置场景
class GameScene extends Scene {
initialize() {
const player = this.createEntity('Player');
player.addComponent(new Transform(100, 100));
}
}
sceneManager.setScene(new GameScene());
// 游戏循环
function gameLoop(deltaTime: number) {
Core.update(deltaTime); // 更新全局服务
sceneManager.update(); // 更新场景
}
// 延迟切换场景(下一帧生效)
sceneManager.loadScene(new MenuScene());Implements
Constructors
Constructor
new SceneManager(
performanceMonitor?):SceneManager
Defined in: packages/core/src/ECS/SceneManager.ts:87
Parameters
performanceMonitor?
Returns
SceneManager
Accessors
currentScene
Get Signature
get currentScene():
null|IScene
Defined in: packages/core/src/ECS/SceneManager.ts:181
获取当前活跃的场景
Returns
null | IScene
当前场景实例,如果没有场景则返回null
api
Get Signature
get api():
null|ECSFluentAPI
Defined in: packages/core/src/ECS/SceneManager.ts:204
获取ECS流式API
提供便捷的实体查询、事件发射等功能。
Example
const api = sceneManager.api;
if (api) {
// 查询所有敌人
const enemies = api.find(Enemy, Transform);
// 发射事件
api.emit('game:start', { level: 1 });
}Returns
null | ECSFluentAPI
ECS API实例,如果当前没有场景则返回null
hasScene
Get Signature
get hasScene():
boolean
Defined in: packages/core/src/ECS/SceneManager.ts:255
检查是否有活跃场景
Returns
boolean
如果有活跃场景返回true,否则返回false
hasPendingScene
Get Signature
get hasPendingScene():
boolean
Defined in: packages/core/src/ECS/SceneManager.ts:264
检查是否有待切换的场景
Returns
boolean
如果有待切换场景返回true,否则返回false
Methods
setSceneChangedCallback()
setSceneChangedCallback(
callback):void
Defined in: packages/core/src/ECS/SceneManager.ts:99
Internal
设置场景切换回调
Parameters
callback
() => void
场景切换时的回调函数
Returns
void
setScene()
setScene<
T>(scene):T
Defined in: packages/core/src/ECS/SceneManager.ts:117
设置当前场景(立即切换)
会自动处理旧场景的结束和新场景的初始化。
Type Parameters
T
T extends IScene
Parameters
scene
T
要设置的场景实例
Returns
T
返回设置的场景实例,便于链式调用
Example
const gameScene = sceneManager.setScene(new GameScene());
console.log(gameScene.name); // 可以立即使用返回的场景loadScene()
loadScene<
T>(scene):void
Defined in: packages/core/src/ECS/SceneManager.ts:171
延迟加载场景(下一帧切换)
场景不会立即切换,而是在下一次调用 update() 时切换。 这对于避免在当前帧的中途切换场景很有用。
Type Parameters
T
T extends IScene
Parameters
scene
T
要加载的场景实例
Returns
void
Example
// 在某个System中触发场景切换
class GameOverSystem extends EntitySystem {
process(entities: readonly Entity[]) {
if (playerHealth <= 0) {
sceneManager.loadScene(new GameOverScene());
// 当前帧继续执行,场景将在下一帧切换
}
}
}update()
update():
void
Defined in: packages/core/src/ECS/SceneManager.ts:222
更新场景
应该在每帧的游戏循环中调用。 会自动处理延迟场景切换。
Returns
void
Example
function gameLoop(deltaTime: number) {
Core.update(deltaTime);
sceneManager.update(); // 每帧调用
}destroy()
destroy():
void
Defined in: packages/core/src/ECS/SceneManager.ts:240
销毁场景管理器
会自动结束当前场景并清理所有资源。 通常在应用程序关闭时调用。
Returns
void
dispose()
dispose():
void
Defined in: packages/core/src/ECS/SceneManager.ts:271
释放资源(IService接口)
Returns
void