libGDX中的状态机实现

11 6月

LIbgdx旗下的gdx-ai库提供了大量使用的AI算法,其中包括了最常见的有限状态机FSM。

gdx-ai是一个普通的java库,并不存在平台相关依赖,所以直接在core中引入就可。

StateMachine是有限状态机的接口,对应的实现目前有两个DefaultStateMachine和StackStateMachine。

StackStateMachine以栈的形式保存状态,所以可以提供了方法获取上一个状态,一般使用DefaultStateMachine就行了。

FSM的例子很多,我们直接来一个简单的。

首先主体对象是人,而人只有两个状态,一个走路,一个打伞。

状态切换的条件是时间,也就是假定下雨的时间符合一定的条件。

首先创建一个Person类

当初始化时默认状态是没有下雨了,而界面的表现就是显示不同的图片

walkrain

而time就是总共经历的时间

在最关键状态处理逻辑,包括进入,更新,退出,接受消息,是放在对应的State中的。这里我们不考虑接受消息的情况,所以永远返回false。

当在update中切换状态时,会自动触发对应的进入(enter)事件,所以也不需要额外的处理。

切换状态时的对应代码实现

参考资料:

https://github.com/libgdx/gdx-ai/wiki/State-Machine

发表评论

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