November 15, 2021 ECS 框架相信大部分同学都听说过,其中包含 Entity-Component-System 三个核心概念: Entity:多个 Component 的组合,类比 OOP 中的对象 Component:仅包含数据,类比 OOP 中的对象属性 System:仅包含逻辑,类比 OOP 中的对象方法 相比面向对象编程,ECS 一个显著的区别在于数据的存储结构,如下图: 在 OOP 中,同一个对象的所有数据(对象属性)存放在一起,而 ECS 中,同一类数据(Component)存放在一起,Entity 记录其所拥有的 Component 的 index,我们知道 CPU 在内存访问时会有缓存机制,连续内存的读写效率要远高于不连续内存,因此在遍历多个对象的同一个属性时,ECS 架构更具性能优势。同时也可以看到,ECS 的 Component 天然支持内存池实现,能有效降低系统的内存抖动,间接提升性能。 EntityX EntityX 是一个小巧的 ECS 开源框架 https://github.com/alecthomas/entityx ,代码比较精简,这里简单梳理下其中几个核心类的实现: 1、Entity Entity 本质只是一个 id,这里还增加了 version,version 和 index 组合起来用一个 uint64_t 来表示。这里 version 主要用来实现 idContinue reading “一个小巧的 ECS 开源框架 EntityX”