跳转到内容

ECS 架构

Estella 构建在 Entity-Component-System(ECS,实体-组件-系统)架构之上。 它不用层层继承的类,而是把游戏状态放进纯数据的组件里,把行为放进遍历这些数据的 系统里。

  • 实体(Entity) —— 一个标识符。它不持有数据、也不含行为,只是组件挂载的句柄。
  • 组件(Component) —— 一小块纯数据结构(位置、速度、精灵)。一个实体由它拥有 哪些组件来定义。
  • 系统(System) —— 每帧运行的函数,遍历所有匹配某个查询的实体,读写它们的组件。

组件存放在缓存友好的池里——每个组件类型一个紧密排布的稀疏集(sparse set)—— 因此一个系统遍历「所有同时拥有 TransformSpeed 的实体」时走的是连续内存。存储位于 C++/WebAssembly 内核中,SDK 通过一份生成并经哈希校验的内存布局零拷贝读取它—— 于是同一个组件的 TypeScript 视图与 C++ 视图永远不会悄悄地对不上。

你用三个 SDK 原语组装一个游戏:

import { App } from 'esengine';
const app = App.new();
// 在 app 上注册组件、系统与插件……
app.run();