ECS模式全称就是Entity-Component-System模式.
– Entity是实例,作为承载组件的载体,也是框架中维护对象的实体.
– Component只包含数据,具备这个组件便具有这个功能.
– System作为逻辑维护,维护对应的组件执行相关操作.
面向对象:把共同的东西抽象出来然后写在基类里面,然后不断的继承它们.
面向组件:把共同的东西抽象成一个组件,然后组合成一个实体.
虽然ECS的开发思想很早就提出来了,但是我发现没有Lua版本的一个ECS框架,其他语言版本倒是挺多的,今天在github上看到触控的 quick-cocos2d-x 的源码发现了GameObject.lua,Registry.lua,Component.lua.
这3个文件,觉得这就是ECS的思想啊! GameObject.lua 代表了 实体也就是Entity,Component.lua代表了Component,
而Registry.lua 相当于一个注册类,缓存了所有的Component.而里面的具体业务逻辑代码构成了System.
只需要把新的组件继承自Component类,实体继承自GameObject类,然后用实体的addComponent 方法添加需要的组件即可.而Component里
的 exportMethods_ 函数是把Component的里的方法导出到实体中,可以在实体对象中直接访问组件里的方法,
这是一种非常巧妙的设计,我觉的这3个文件完全可以抽出来放当我们的项目中去.
Github地址: