有限状态机FSM学习

有限状态机FSM学习
主要参考学习了三篇文章:

1、 A Simple C++ Finite State Machine
2、 有限状态机的C++实现(1)-epoll状态机
3、 State-Driven Game Agent Design

第一篇中,提供了State接口和StateMachine类。State接口包括了进入状态、执行状态、离开状态时应该做的事情,根据具体需要继承State接口,实现具体的状态类。StateMachine类中提供了状态转移的方法和状态更新的方法:TransitionTo, Update。更新帧时,执行Update,从而执行State接口中的Process方法,可能改变当前的状态,即调用TrainsitionTo方法。

第二篇中,提供了State接口和Actor接口、BaseActor类,没有StateMachine类。状态转移和状态执行都在Actor的ChangeState中执行。引入Actor可以使State被不同的对象拥有。

第三篇中,提供了State接口、StateMachine类模版、Actor(Miner),主要面向游戏中的AI。其中,每个Actor拥有一个StateMachine,StateMachine控制了State的流转。更新Actor时,将委托StateMachine进行State的更新和执行。另外,State接口也模版化,参数为Actor,从而State在执行时可以调用Actor的成员方法,即做出具体的行为。本文中具体的State采用了单例实现,因此无法保存Actor的信息。

根据不同的具体需求,状态机也可以有不同的实现,前三者中,第三个比较清晰,比较容易把握和改造。

你可能感兴趣的:(有限状态机FSM学习)