gpt4 book ai didi

c++ - 用于 C++ 游戏的通用 FSM?

转载 作者:太空宇宙 更新时间:2023-11-04 12:25:49 26 4
gpt4 key购买 nike

<分区>

我想知道是否有一种方法可以使用 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;
}
}

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

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

你们有什么建议?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com