Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅关注editing this post一个问题。
1年前关闭。
Improve this question
我想知道是否有一种方法可以为使用C++的游戏编写某种“通用” FSM?
我的游戏具有面向组件的设计,因此我使用FSM组件。
我的有限状态机(FSM)组件看起来或多或少都是这种方式。
我很想听听您对如何使这个FSM组件通用的意见/想法或建议。泛型是指:
1)从xml文件创建fsmTable非常容易,我的意思是,它只是一堆整数,可以加载以创建MAX_STATESxMAX_ACTION矩阵。
2)但是“执行 Action ”方法呢?
如果我想使“ Action ”和开关通用,该怎么办?
为了避免为每个
你们有什么建议?
想改善这个问题吗?更新问题,使其仅关注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组件类? (gecFSMZombie
,gecFSMDryad
,gecFSMBoss
等?)。例如,这将使我能够“数据驱动”并从文件构造通用FSM。你们有什么建议?
最佳答案
看一下Boost Statechart库。 (以前称为boost::fsm)
它带有一个非常漂亮的相机示例。
关于c++ - 用于C++游戏的通用FSM? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2603917/
10-11 00:39