Skip to content

ECS Framework API v2.2.13


ECS Framework API / SceneManager

Class: SceneManager

Defined in: packages/core/src/ECS/SceneManager.ts:51

单场景管理器

适用场景:

  • 单人游戏
  • 简单场景切换
  • 不需要多World隔离的项目

特点:

  • 轻量级,零额外开销
  • 简单直观的API
  • 支持延迟场景切换
  • 自动管理ECS API

Example

typescript
// 初始化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?

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
typescript
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

typescript
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

typescript
// 在某个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

typescript
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

Implementation of

IService.dispose

Released under the MIT License.