Ashley使用实例

20 8月
预计阅读时间: 2 分钟

上一篇文章提到了Ashley,但是没给出具体的例子,加之wiki资料不全,可能使用上有些困难。

superjumper是Libgdx的一个demo,siondream使用Ashley改造了整个项目,特别适合学习入门。

地址是:https://github.com/siondream/ashley-superjumper

组件

components是entity system的主要构成,这里就成为组件吧。

组件只包含具体的值,比如宽度,高度,状态等等。

比如我们的主角Bob


而对于金币Coin


对于整个游戏的状态,比如时间、分数等等


这些都是游戏中需要用到的Value Object,但是对于游戏常有的一些组件也需要处理,比如Camera和Texture



系统

System是整体的逻辑所在,但是System和Component不是一一对应的。

以人物的移动为例,这个MovementSystem需要MovementComponent和TransformComponent。

MovementSystem需要处理的就是人物的移动,读取当前的移动方向,然后改变坐标.

MovementSystem继承Ashley的IteratingSystem类。


再看看StateSystem,对于SuperJumper而言,主要就是记录时间,所以相对简单。同样继承于Ashley之中的IteratingSystem类。


使用

Ashley的使用主要就是声明所需的System,然后把所有组件都加入Engine就可以了。


在update中直接调用engine.update(deltaTime);即可。

Ashley内置的系统

Ashley目前只内置了一种系统,即IteratingSystem。

它对于每一个实体都调用processEntity()来处理。

如果有其他需要可以通过继承EntitySystem类来自己扩展。

参考资料

Ashley文档

发表评论

电子邮件地址不会被公开。