EntityJS
EntityJS 是一个基于实体-组件(Entity-Component)设计模式的 HTML5 JavaScript 游戏引擎,强调低耦合与高复用,让开发者通过组合组件快速构建 2D 游戏。
爱鲜报评分
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 会被转换为 JSTests: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 架构的参考实现。
评论
- 暂无评论,来写第一条吧。