Closed. This question needs to be more focused。它当前不接受答案。












想改善这个问题吗?更新问题,使其仅关注editing this post一个问题。

1年前关闭。



Improve this question




我想知道是否有一种方法可以为使用C++的游戏编写某种“通用” FSM?

我的游戏具有面向组件的设计,因此我使用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_ACTION矩阵。
void gecFSM::setRule(kEntityState initialState, int inputAction, kEntityState resultingState)
{
    fsmTable[initialState][inputAction] = resultingState;
}

2)但是“执行 Action ”方法呢?
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;
    }
}

如果我想使“ Action ”和开关通用,该怎么办?

为了避免为每个GameEntity创建不同的FSM组件类? (gecFSMZombiegecFSMDryadgecFSMBoss等?)。例如,这将使我能够“数据驱动”并从文件构造通用FSM。

你们有什么建议?

最佳答案

看一下Boost Statechart库。 (以前称为boost::fsm)
它带有一个非常漂亮的相机示例。

关于c++ - 用于C++游戏的通用FSM? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2603917/

10-11 00:39