我想知道是否有一种方法可以为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)但是“执行动作”方法呢?
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;
}
}
如果我想将“操作”和开关设为通用,该怎么办?
这是为了避免为每个GameEntity
创建不同的FSM组件类? (gecFSMZombie
,gecFSMDryad
,gecFSMBoss
等?)。这样我就可以使用“数据驱动”并从文件中构建我的通用FSM。
你们有什么建议?
答案 0 :(得分:1)
查看Boost状态图库。 (以前称为boost :: fsm) 它附带了一个非常漂亮的照相机示例。