@driftengine/entities

中文文档
4.14.3发布于 2026/11/04Apache-2.0TypeScriptES Module近 30 天下载 2147

有世代身份、组件存储、系统和场景的实体

中文使用文档
文档目录4 节
  1. 把手
  2. 系统宣布它们碰到什么
  3. 预告片和场景
  4. 文档

@driftengine/实体

具有代际身份、组件存储、查询、申报读取和 写作,预发和场景连载.

它没有进口其他引擎包. 实体模型,知道什么是 Transform 这将是一个 实体模型知道它有一个场景—— 而宣布的读取和写作的论点是: 声明是一个组件 编号 而不是说组件的意思.

还有 宣告无组件类型一个消费者写出自己需要的东西,或者拿走 从拥有子系统的任何软件包中获取.

import { EntityAllocator } from '@driftengine/entities';

const entities = new EntityAllocator();
const player = entities.create();
entities.destroy(player);
entities.alive(player); // false — and the entity that takes the slot is a different handle

把手

一个实体是一个数字:一个26位指数和一个27位的生成,在计算上结合. 这个 生成是停止一个针对活实体的 stale 手柄 - 释放和再利用的指数使 每个旧的参考都无声无息地有效,指向一个在任何地方都没有出错的不同事物.

传统的包装 Uint32 分成24和8,所以一个插槽的第257回用手一个手柄 和第一次一样 这种分割使6 700万实体和1.34亿再利用 每个存储实体的成本为4个字节,因为一个手柄存在于 Float64Array。 。 。 .

26+27是整个53位的预算,准确的说. 没有任何客厅,故意的, 一个测试说 顶端的手柄可以在这里发现,而不是在错误的比较中发现.

系统宣布它们碰到什么

const schedule = buildSchedule([
  { name: 'hunger', writes: [Hunger], everyTicks: 60, run(view) { … } },
  { name: 'decay', reads: [Hunger], writes: [Health], after: ['hunger'], run(view) { … } },
]);
runSchedule(world, schedule, tick);

宣言得到实施. 一个没有声明的系统被拒绝 命名两者——一个从谎言中衍生出来的调度比没有调度更糟糕. writes 隐含 reads。 。 。 .

一个投球的系统被跳过,其他的仍然运行. 默认失败记录一次 每个系统/世界。 传一个记者作为第四个论点, 将每一次失败,每一滴,与 系统的名称, 勾选和错误, 没有任何记录; 从中扔出失败 开发过程中的致命性:

runSchedule(world, schedule, tick, ({ system, tick, error }) => overlay.add(system, tick, error));

命令是声明命令,仅按 after,在地形上排序为 宣布命令为打结。 周期 after 拒绝命名系统.

everyTicks 前进 固定步骤 并且从来不是一种速率,以秒计: 以时钟计 将定型合同 留在第一个落架.

系统内部的破坏被推迟 在它返回之后。 删除替换了最后的密度 进入空洞,所以去掉中行走移动光标已经传递到一个实体 它已经访问过的立场——这个实体从未被默默地看到过,也从未被看到过 碰巧是最后一个. create 财务报告和审定财务报表 add ,并可在 同样的通行证.

预告片和场景

const guard = definePrefab('guard', [
  [Health, { current: 100 }],
  [Perception, { sightRange: 40 }],
]);
const spawned = instantiate(world, guard, { Perception: { sightRange: 60 } });

const scene = serializeWorld(world, [Health, Perception]);
const result = deserializeWorld(fresh, scene, [Health, Perception]);

预置值是一个值,与其实例没有任何联系. 现场连线是编辑想要的, 并且每个实例都花费它所覆盖的字段的记录; Track K可以添加该记录 不改变什么是预想.

场景用稳定字段 ID 处理每个值从来没有一个名字也没有一个位置。 一个字段 在中间插入后,会重新编号,然后保存在右上方 名称有错误的值——比失败更糟糕,因为它看起来是有效的.

跨越变化的加载通过 driftscript迁移,不变:自 其缺省而来,一去已去,一去已去,一去已去 类型 更改后拒绝命名 这个 在每一个实体迁移之前,任何文字都不能写入世界,所以在第五天就拒绝了 不留下四个.

实体参考文献为 重新映射 而不是保存, 因为保存的手柄的插槽可能 活在被载入的世界里 这只适合申报的田地 Entity; 数字 碰巧持有一个是一个数字.

文档

包括模型拒绝的五件事 将每个反转.

版本与发布记录

@driftengine/entities 共发布 52 个版本,首次发布于 2026/09/13;过去 12 个月发布了 52 个版本。

版本发布日期距今
4.14.3latest2026/11/049 天前
4.14.22026/11/0310 天前
4.14.12026/11/0310 天前
4.14.02026/10/1826 天前
4.13.62026/10/1529 天前
4.13.52026/10/121 个月前

关于 @driftengine/entities 的常见问题

@driftengine/entities 是什么?

有世代身份、组件存储、系统和场景的实体

如何安装 @driftengine/entities?

在项目目录运行 npm install @driftengine/entities,或使用 pnpm add / yarn add / bun add。

@driftengine/entities 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@driftengine/entities 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@driftengine/entities 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.12.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@driftengine/entities 可以商用吗?

@driftengine/entities 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@driftengine/entities 的下载量有多少?

根据 npm 官方下载统计,@driftengine/entities 在 2026/10/13 – 2026/11/11 这 30 天内被下载 2,147 次,日均约 72 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@driftengine/entities 还在维护吗?

最新版本 4.14.3 发布于 2026/11/04(9 天前);至今共发布 52 个版本,其中过去 12 个月发布了 52 个;首次发布于 2026/09/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。