AX 爱鲜报

EntityJS

EntityJS 是一个基于实体-组件(Entity-Component)设计模式的 HTML5 JavaScript 游戏引擎,强调低耦合与高复用,让开发者通过组合组件快速构建 2D 游戏。

爱鲜报评分

0.0

0 人评分

185

星数

否

中文

JavaScript

主语言

是

活跃

10

贡献者

人工分析

EDITORIAL

推荐理由

EntityJS 采用实体-组件架构,避免了传统继承式引擎中常见的“上帝类”问题,组件可自由组合、跨项目复用,适合想深入理解 ECS 设计思想的开发者。项目内置命令行工具、QUnit 测试与 Tiled 地图编辑器支持,工程化程度在同类早期 JS 引擎中较为突出。不过项目已停止维护并处于重写阶段,文档与 API 以旧版 Ruby 工具链为主,新项目需谨慎评估。

适用场景

  • HTML5 2D 小游戏原型开发
  • 学习实体-组件(ECS)架构设计
  • Game Jam 快速搭建可玩 Demo
  • 基于 Tiled 地图的横版/平台游戏
  • 浏览器端 JavaScript 游戏实验项目

优点

  • 实体-组件架构低耦合,组件可自由组合与复用
  • 提供 CLI 工具,可快速生成游戏、组件与测试
  • 内置 QUnit 测试支持,含实体与输入模拟辅助断言
  • 兼容 Tiled 地图编辑器,便于关卡制作
  • 代码结构清晰,适合作为 ECS 学习范例

缺点

  • 项目已停止维护,正从 Ruby 迁移到 Node.js 的重写阶段
  • 安装依赖 Ruby 1.8.1+ 与 gem,对现代前端工作流不友好
  • 缺少中文文档,社区与资料较少
  • Star 数不高,生态与插件支持有限
上手难度 进阶

EntityJS 简介

EntityJS 是一个基于 实体-组件(Entity-Component) 设计模式的 HTML5 JavaScript 游戏引擎。它的核心理念是:把游戏逻辑拆分成一个个可大可小的 组件(Component),再通过 实体(Entity) 把组件组合起来,从而获得极高的灵活性与可复用性。

为什么选择实体-组件设计

传统游戏引擎常用类继承来组织代码,这会导致类之间高度耦合:功能被绑定在某个具体类上,难以移植,随着开发推进类会不断膨胀,最终演变成难以维护的“上帝类”。

EntityJS 的做法是:

  • 所有逻辑写在组件里,组件可大可小;
  • 实体本身只是其组件的实时组合;
  • 通过增删组件来改变实体行为,组件之间低耦合、可跨项目复用。

主要特性

  • 实体-组件架构:灵活组合,避免继承层级带来的耦合问题。
  • 命令行工具:可创建游戏、组件与测试,并支持构建与本地服务器。
  • 模板系统:内置默认模板与平台游戏模板,可快速起步。
  • QUnit 测试:内置测试框架,并提供实体与输入相关的辅助断言。
  • Tiled 地图支持:可直接加载 .tmx 地图文件用于关卡。
  • 工厂方法:组件可定义工厂,用于批量创建结构复杂的实体。

目录结构概览

  • Assets:图片、音效等外部资源
  • Build:构建产物
  • Scripts:JS/Coffee 源码,XML、TMX、JSON 会被转换为 JS
  • Tests:QUnit 测试文件
  • Styles:CSS 样式
  • game.json:可选配置,用于指定脚本顺序、忽略文件等

使用方式示意

项目通过命令行工具管理游戏生命周期,例如创建游戏、创建组件、运行服务器与构建:

entityjs new mygame platform
entityjs comp rock
entityjs server
entityjs build

在代码中,实体通过短 getter/setter 访问属性:

var tile = re.e('tile');
tile.tileX(1); // 设置
tile.tileX();  // 读取

注意事项

EntityJS 目前处于重写阶段,正从 Ruby 迁移到 Node.js 包,并进一步向实体-系统(Entity-System)设计演进。仓库中的安装说明仍基于 Ruby 1.8.1+ 与 gem,与现代前端工具链差异较大。如果你打算在新项目中使用,建议先查看 dev 分支了解最新进展,或将其作为学习 ECS 架构的参考实现。

评论

登录后才可评论与评分

0 条评论

  • 暂无评论,来写第一条吧。