标签:继承 update 控制 one 宏定义 div content rtu init
enum EState{ eState_Min, // 未初始化状态 eState_One, eState_Two, ... eState_Max, // 用于异常检測 };
EState curState = eState_Min;
void update(){ switch(curState){ case eState_One: onStateOne(); break; case eState_Min: onStateTwo(); break; ... case eState_Max: break; default: // 报错 } }
void onStateOne(){ } void onStateTwo(){ } ...
全部,我们还须要一个转换状态的函数
void converToState(EState dstState){ curState = dstState; }
当游戏规模较大,逻辑非常复杂后。在switch结构就会变得非常复杂。
这个纯虚函数用来处理当前状态的一些逻辑。
class BaseState{ public: virtual ~BaseState() = 0; virtual void execute() = 0; BaseState::~BaseState(){} };
class FSM{ public: void converToState(BaseState *state){ if state then delete m_curState; m_curState = NULL; end m_curState = state; } void update(){ m_curState->onState() } protected: BaseState* m_curState; };
class Monster{ public: void update(){ m_SFM->update() } protected: FSM* m_SFM; };
class StateMove:BaseState{ public: ~BaseState(){} void execute(){ // move,check } }; class StateFight:BaseState{ public: ~BaseState(){} void execute(){ // fight。check } };
标签:继承 update 控制 one 宏定义 div content rtu init
原文地址:http://www.cnblogs.com/mthoutai/p/6888830.html