基于ECS的游戏框架
项目地址: esengine/ecs-framework: 一套ecs框架,可用于egret/laya/cocos及其他使用ts/js语言的引擎 (github.com)
框架介绍
ecs-framework 的目标是成为功能强大的框架。我们不仅仅提供了ECS框架,还有更为强劲的游戏基础框架。它为您构建游戏提供了坚实的基础。它包括的许多功能包括:
- 完整的场景/实体/组件系统
- SpatialHash用于超快速的广相物理学查找。您永远不会看到它,因为它在幕后起作用,但是您仍然会喜欢它,因为它可以通过射线广播或重叠检查迅速找到您附近的所有事物。
- AABB,圆和多边形碰撞/触发检测
- ShapeCollisionsBox
- ShapeCollisionsCircle
- ShapeCollisionsLine
- ShapeCollisionsPoint
- ShapeCollisionsPolygon
- 高效的协程,可在多个帧或动画定时中分解大型任务(Core.startCoroutine)
- 通过Astar和广度优先搜索提供寻路支持,以查找图块地图或您自己的自定义格式 ( 参见 https://github.com/esengine/ecs-astar )
- tween系统。任何number / Vector / 矩形/字段或属性都可以tween。 (参见 https://github.com/esengine/ecs-tween)
- 针对核心事件的优化的事件发射器(发射器类),您也可以将其添加到自己的任何类中
- 延迟和重复任务的调度程序(核心调度方法)
- 丰富的数学支持库
- MathHelper
- Bezier
- Matrix2D
- Vector2
- Rectangle
- Flags
框架讨论
之前在社区里看到有关于ECS框架的讨论了。相信大家对ECS也有了一个概念。因为受到语言的影响,并没有多线程也没有内存布局的控制,所以框架也没有采用传统的ECS架构。typescript与其他语言不同,因此我对ecs的设计尽可能的支持typescript特性
ECS比起其他设计模式更灵活,可以更好的集中、组织、排序和过滤游戏中的对象。ecs让您拥有轻量级实体和组件,这些组件可以由系统批量处理。
例如,您在制作一个射手,您可能会有几十到几百个子弹,这些作为轻量级实体由系统批量处理。
渲染结合
为了使框架与cocos更加贴合使用,提供了一个项目示例,地址如下:
esengine/cocos-framework: 基于cocos与ecs-framework开发的框架 (github.com)
里面包含了几个渲染相关的例子(没有提供关于ECS的具体使用方式,后续还会更新更多的例子)
- 基础场景
- LineCast 射线检测
- ArcadeRigidBody