Node类的源码分析的时候瞟见ComponentComponentContainer,不知此为何物,便google之,得以下资料:

文章:

PPT:

Github

PS:待我好好研究这个github上的代码先,现在对ECS还是迷迷糊糊

ECS? CES?

Wiki百科上的是ECS,但是可以看到在上面有些文章中,把Entity-Component-System讲成Component-Entity-System,我猜是因为这样符合从小到大的原则吧。所以我这里也是按照CES的顺序来介绍。

Component – 数据

Component直接翻译过来是组件的意思,实际上,在ECS中,仅仅是数据的集合。

例如:

  • 位置(x, y)
  • 力(x, y)
  • 生命值(v)

Entity – 游戏对象

Entity即实体,也就是游戏中的具体对象,可能包含多种Component,来表示某个具体的对象。

例如:

  • 球(位置,力)
  • 敌人(位置,生命值)

System – 逻辑控制

System则是对Entity中Component处理的逻辑部分。

先引用一张描述Entity的图片:

Entity -- 钥匙

有人把Entity比喻成一把钥匙,一把钥匙上有很多钥匙齿,这里的钥匙齿就代表一个Component

再引用一张描述System的图片:

System -- 锁

System自然就被比喻成一把,一个去寻找适合的钥匙钥匙钥匙齿要符合System的要求 (这里的钥匙不需要和全匹配,只需要匹配所需要的钥匙齿就行)

例如:

  • 移动系统(位置)
  • 空气系统(位置,力)
  • 受伤系统(生命值,位置)

对于移动系统,可以用于球实体敌人实体,因为移动系统只操作位置组件
对于空气系统,只有球实体满足空气系统要求的位置组件力组件

怎么用? —- 实例分析

如何用到游戏中呢? 我看了vinova/Artemis-Cpp这个的实现。

我前几日看了下代码,给加上了中文注释Artemis-Cpp中文注释

感觉直接将也讲不出什么来,想想还是在cocos2dx中加入之后,在来具体分析吧。

Cocos2dx & ECS —-> 合体!

TO BE CONTINUE…
PS: 这周末搞!

当当当~~~发现了一个genius-x,主要是同事买了本书(之前我还建议他不要买来着,现在想想也是醉了=……=)我翻了翻目录便看到了相关的东西。

正所谓不要重复制造轮子是不。让我去好好研究几天。搞个小demo出来?

Genius-x 实战 —- (写啥待定~~)