Zay-ES起步
获取Zay-ES类库
Zay-ES 最新的发布版本的下载地址 :Releases
Zay-ES是一个非常轻量的实体组件系统(ECS)框架,一共包含2个 jar 文件。
zay-es-版本号.jar
Zay-ES 框架的核心模块。zay-es-net-版本号.jar
Zay-ES 框架的网络模块。
注意:如果你并不打算开发网络游戏,或者不打算在网络模块中使用 Zay-ES 框架,就不需要 zay-es-net-版本号.jar
这个文件。
你也可以使用 gradle/maven/ivy 等自动编译工具来配置 Zay-ES 类库。Zay-ES 的jar文件已经上传到了 jCenter 公共仓库中。
下面是在 build.gradle
文件中添加 Zay-ES 类库的例子:
dependencies {
compile "com.simsilica:zay-es:1.2.1"
compile "com.simsilica:zay-es-net:1.2.1"
}
依赖
如果你是直接下载 Zay-ES 框架的jar文件,而非使用现代的自动化编译工具,那就得自己额外下载 Zay-ES 框架所依赖的其他jar文件:
- Guava 12.0 或 更高版本。
- slf4j 1.7.5 或 更高版本,以及一个你喜欢的logging框架适配器。(至少需要 slf4j 的 API 文件,例如:
slf4j-api-1.7.5.jar
)
Zay-ES 基本使用方法
创建 EntityData 核心对象
EntityData
是整个 Zay-ES 系统的关键接口,它会记录所有的组件数据。实例化 EntityData 的最少代码如下:
EntityData ed = new DefaultEntityData();
DefaultEntityData
将把组件数据保存在内存中,适用于单机游戏。
创建一个实体(Entity)
通过调用 EntityData
接口的 createEntity()
方法来创建实体。创建实体时,实际上会生成一个新的 EntityId
,用于关联各种组件。
EntityId myEntity = ed.createEntity();
设置组件(Componenet)
Zay-ES框架中的 EntityComponent
是一个接口,通常来说,你应该根据程序的需要来创建具体的实现类。不过 Zay-ES 框架提供了几个常用的“标准”组件,下面的代码说明了如何给刚才创建的实体设置 Name 组件。
ed.setComponent(myEntity, new Name("My Entity"));
监听变化(主循环)
Zay-ES 与 其他 ECS 框架最大的一个不同之处,在于它并不强制你去实现特别的system
模型。很多 ECS 系统都采用 IOC 模式,你负责实现 System 接口,然后 ECS 框架负责调用各个系统。使用 Zay-ES 时,如何实现系统模块,以及如何使用实体数据,都可以根据你的意愿来编写。你可以在任何时候主动查询实体数据,Zay-ES 的内部机制将保证这种用法的执行效率。
下面是一个基本的轮循:
EntitySet namedEntities = ed.getEntities(Name.class);
while( true ) {
namedEntities.applyChanges();
for( Entity e : namedEntities ) {
// 做点什么
}
}
下面是一种更高效的轮循方式:只在实体数据发生改变时才执行逻辑代码:
EntitySet namedEntities = ed.getEntities(Name.class);
while( true ) {
if( namedEntities.applyChanges() ) {
// 对那些刚加入的实体进行操作
addSomeStuff(namedEntities.getAddedEntities());
// 对那些已经消亡的实体进行操作
removeSomeStuff(namedEntities.getRemovedEntities());
// 对那些被修改过的实体进行操作
changeSomeStuff(namedEntities.getChangedEntities());
}
}
想要更加详细地了解 Zay-ES 框架,请继续阅读后续文章。