C+中游戏的通用FSM+;? 我想知道有没有办法可以为C++游戏提供一种“通用”的FSM代码。
我的游戏采用面向组件的设计,所以我使用FSM组件 我的有限状态机(FSM)组件或多或少是这样的C+中游戏的通用FSM+;? 我想知道有没有办法可以为C++游戏提供一种“通用”的FSM代码。,c++,fsm,C++,Fsm,我的游戏采用面向组件的设计,所以我使用FSM组件 我的有限状态机(FSM)组件或多或少是这样的 class gecFSM : public gecBehaviour { public: //Constructors gecFSM() { state = kEntityState_walk; } gecFSM(kEntityState s) { state = s; } //Interface void setRule(kEntityState ini
class gecFSM : public gecBehaviour
{
public:
//Constructors
gecFSM() { state = kEntityState_walk; }
gecFSM(kEntityState s) { state = s; }
//Interface
void setRule(kEntityState initialState, int inputAction, kEntityState resultingState);
void performAction(int action);
private:
kEntityState fsmTable[MAX_STATES][MAX_ACTIONS];
};
我很想听听您关于如何使FSM组件通用化的意见/想法或建议。我的意思是:
1) 从xml文件创建fsmTable非常简单,我的意思是,只需加载一组整数即可创建MAX_STATESxMAX_动作矩阵
void gecFSM::setRule(kEntityState initialState, int inputAction, kEntityState resultingState)
{
fsmTable[initialState][inputAction] = resultingState;
}
2) 但是“执行操作”方法呢
如果我想让“动作”和开关通用呢
这是为了避免为每个游戏实体创建不同的FSM组件类?(gecFSMZombie
,gecFSMDryad
,gecFSMBoss
等?)。这将允许我去“数据驱动”,并从文件中构造我的通用FSM
你们有什么建议 看看Boost状态图库。(以前称为boost::fsm)
它附带了一个非常好的照相/摄像机示例。看看Boost状态图库。(以前称为boost::fsm)
它附带了一个非常好的照相/摄像机示例。您看过boost状态机库吗?看过boost状态机库吗?将看一看,谢谢您的建议将看一看,谢谢您的建议
void gecFSM::performAction(int action)
{
switch( smTable[ ownerEntity->getState() ][ action ] )
{
case WALK:
/*Walk action*/
break;
case STAND:
/*Stand action*/
break;
case JUMP:
/*Jump action*/
break;
case RUN:
/*Run action*/
break;
}
}