新增scenemanager,重构core类减少多世界造成的性能压力

This commit is contained in:
YHH
2025-10-09 23:33:11 +08:00
parent 79f7c89e23
commit 7339e7ecec
10 changed files with 876 additions and 1103 deletions

View File

@@ -289,12 +289,20 @@ class StatsScene extends Scene {
## 场景集成到框架
场景可以通过两种方式运行
ECS Framework 提供了灵活的场景管理架构,适用于不同规模的应用
### 1. 简单的单场景应用
### 1. 使用 SceneManager推荐大多数应用
适用于 95% 的游戏应用(单人游戏、简单多人游戏、移动游戏等):
```typescript
import { Core } from '@esengine/ecs-framework';
import { Core, SceneManager } from '@esengine/ecs-framework';
// 初始化Core全局服务
Core.create({ debug: true });
// 创建场景管理器
const sceneManager = new SceneManager();
// 创建游戏场景
class GameScene extends Scene {
@@ -305,21 +313,52 @@ class GameScene extends Scene {
}
}
// 启动游戏
Core.create();
// 设置场景
const gameScene = new GameScene();
Core.setScene(gameScene);
sceneManager.setScene(gameScene);
// 游戏循环
function gameLoop(deltaTime: number) {
Core.update(deltaTime); // 更新全局服务
sceneManager.update(); // 更新当前场景
}
```
### 2. 复杂的多场景应用
### 2. 场景切换
SceneManager 支持流畅的场景切换:
```typescript
import { WorldManager } from '@esengine/ecs-framework';
// 立即切换场景
const menuScene = new MenuScene();
sceneManager.setScene(menuScene);
// 获取WorldManager实例
const worldManager = WorldManager.getInstance();
// 延迟切换场景(在下一帧切换)
const gameScene = new GameScene();
sceneManager.startSceneTransition(gameScene, false);
// 创建World
// 访问当前场景
const currentScene = sceneManager.currentScene;
// 访问 ECS API
const ecsAPI = sceneManager.ecsAPI;
const entity = ecsAPI?.createEntity('player');
```
### 3. 使用 WorldManager高级用例
适用于需要完全隔离的多世界应用MMO服务器、游戏房间系统等
```typescript
import { Core, WorldManager } from '@esengine/ecs-framework';
// 初始化Core全局服务
Core.create({ debug: true });
// 创建世界管理器
const worldManager = new WorldManager();
// 创建多个独立的游戏世界
const gameWorld = worldManager.createWorld('game', {
name: 'MainGame',
maxScenes: 5
@@ -331,6 +370,12 @@ const gameScene = gameWorld.createScene('game', new GameScene());
// 激活场景
gameWorld.setSceneActive('menu', true);
// 游戏循环
function gameLoop(deltaTime: number) {
Core.update(deltaTime); // 更新全局服务
worldManager.updateAll(); // 更新所有世界
}
```
## 多场景管理
@@ -376,21 +421,43 @@ class GameWorld extends World {
}
```
## 与 World 的关系
## 架构层次
Scene 的运行架构层次
ECS Framework 的架构层次清晰,职责分明
```typescript
// Core -> WorldManager -> World -> Scene -> EntitySystem -> Entity -> Component
// 架构层次:
// Core (全局服务) → SceneManager (场景管理) → Scene → EntitySystem → Entity → Component
// 或
// Core (全局服务) → WorldManager (世界管理) → World → Scene → EntitySystem → Entity → Component
// 1. 简单应用Core直接管理单个Scene
Core.setScene(new GameScene());
// 1. 推荐:使用 SceneManager 管理单场景/场景切换
import { Core, SceneManager } from '@esengine/ecs-framework';
// 2. 复杂应用WorldManager管理多个World每个World管理多个Scene
const worldManager = WorldManager.getInstance();
Core.create({ debug: true });
const sceneManager = new SceneManager();
sceneManager.setScene(new GameScene());
// 游戏循环
function gameLoop(deltaTime: number) {
Core.update(deltaTime); // 全局服务
sceneManager.update(); // 场景更新
}
// 2. 高级:使用 WorldManager 管理多世界
import { Core, WorldManager } from '@esengine/ecs-framework';
Core.create({ debug: true });
const worldManager = new WorldManager();
const world = worldManager.createWorld('gameWorld');
const scene = world.createScene('mainScene', new GameScene());
world.setSceneActive('mainScene', true);
// 游戏循环
function gameLoop(deltaTime: number) {
Core.update(deltaTime); // 全局服务
worldManager.updateAll(); // 所有世界更新
}
```
## 最佳实践