C+中游戏的通用FSM+;? 我想知道有没有办法可以为C++游戏提供一种“通用”的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

我的游戏采用面向组件的设计,所以我使用FSM组件

我的有限状态机(FSM)组件或多或少是这样的

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;
    }
}