質問

私は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コンポーネントクラスを作成しないようにするために? (gecFSMZombiegecFSMDryadgecFSMBossなど?)。それは私が「データ駆動型」に行くと、たとえばファイルからの私の一般的なFSMのを構築できるようになります。

あなたの人々は何を示唆していますか?

役に立ちましたか?

解決

ブーストステートチャートライブラリを見てください。 (旧ブースト:: FSMとして知られています) それはとても素敵な写真カメラの例が付属しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top