質問
私は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コンポーネントを作成する方法についてのご意見/アイデアや提案を聞くのが大好きです。一般的なIの平均値とのます:
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のを構築できるようになります。
あなたの人々は何を示唆していますか?
解決
ブーストステートチャートライブラリを見てください。 (旧ブースト:: FSMとして知られています) それはとても素敵な写真カメラの例が付属しています。
所属していません StackOverflow