HexoEntity Component System ---- 数据驱动模型 2014-10-22
写Node
类的源码分析的时候瞟见Component
和ComponentContainer
,不知此为何物,便google之,得以下资料:
文章:
- 在cocos2d-x中实践数据驱动的游戏开发
- Understanding Component-Entity-Systems
- Implementing Component-Entity-Systems
- Evolve Your Hierarchy Refactoring Game Entities with Components
- Case Study: Bomberman Mechanics in an Entity-Component-System
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
比喻成一把钥匙
,一把钥匙
上有很多钥匙齿
,这里的钥匙齿
就代表一个Component
。
再引用一张描述System的图片:
System
自然就被比喻成一把锁
,一个锁
去寻找适合的钥匙
。钥匙
的钥匙齿
要符合System
的要求 (这里的钥匙
不需要和锁
全匹配,只需要匹配锁
所需要的钥匙齿
就行)
例如:
- 移动系统(位置)
- 空气系统(位置,力)
- 受伤系统(生命值,位置)
对于移动系统
,可以用于球实体
和敌人实体
,因为移动系统
只操作位置组件
。
对于空气系统
,只有球实体
满足空气系统
要求的位置组件
和力组件
。
怎么用? —- 实例分析
如何用到游戏中呢? 我看了vinova/Artemis-Cpp这个的实现。
我前几日看了下代码,给加上了中文注释Artemis-Cpp中文注释
感觉直接将也讲不出什么来,想想还是在cocos2dx中加入之后,在来具体分析吧。
Cocos2dx & ECS —-> 合体!
TO BE CONTINUE…PS: 这周末搞!
当当当~~~发现了一个genius-x,主要是同事买了本书(之前我还建议他不要买来着,现在想想也是醉了=……=)我翻了翻目录便看到了相关的东西。
正所谓不要重复制造轮子是不。让我去好好研究几天。搞个小demo出来?