關於有限狀態機和遊戲中角色和複雜物件的思考

2021-05-24 09:37:47 字數 936 閱讀 9832

有限狀態機的定義這裡不再多說,參見:

我想著重記一點fsm作為遊戲管理核心可能帶來的好處。

引入眾所周知在事件驅動的地方使用指令碼是最合適的擴充套件方式,比如rpg遊戲和rts遊戲。但在act和ftg遊戲中如果要描述乙個有很多種動作的角色,簡單的指令碼語言就略顯不足了。

這裡fsm就可以發揮它的優勢了,狀態集來容納一組同構的複雜資料,轉換規則來定義物體對遊戲世界的響應,即狀態改變。從最早的初始狀態到最後的若干可能的終結狀態,只要這個物體存在,必然是處於某一狀態之中。狀態轉換函式可以用二維表的形式儲存在檔案或者資料庫中,對開發角色編輯器也提供了很大的方便。

如果有足夠的時間,我們甚至可以使用gui開發出直觀的在視窗上拖放狀態,鏈結轉換指令和條件,非常直觀的完成角色設計。指令(比如乙個必殺的搓招指令)和外界事件(比如從空中落地的瞬間)實際上都是狀態機的轉換條件(trigger) 二者對於fsm是沒有區別的,只是**不同。

乙個典型的例項m.u.g.e.n引擎從提供的介面上來看完全是基於fsm的思想設計的,一切的物件都是一組狀態,包括物件的物理屬性也都直接隸屬於狀態。當然這個古老的東西還是有很多看起來不那麼合理優雅的地方,比如沒有命名只有數字序號的狀態讓製作角色的時候閱讀起來非常不便,經常要翻來覆去查詢序號的意義。但是它整體的設計思路是十分清晰的:物理規則首先決定物體的運動,狀態機通過在進出狀態時改變物理屬性來作用於角色或者物件,最終構成看起來一致也受控的世界體系。比如a擊打b使得b受到擊打trigger,轉變為飛出狀態。根據a的擊打力度和角度,可以給b乙個初速度,b在飛出狀態時受控標誌為關狀態(被打飛了還能隨便按一下方向站住?那就太假了吧)一直到落地,落地狀態在時間到了的trigger影響下,角色跳起,恢復受控狀態。這裡飛出到落地的過程中fsm是不動的,完全是物理規則在起效,這進一步印證了fsm基於物理規則,通過改變物理屬性的方式對角色施加影響的運作模式。

以上。

《遊戲程式設計模式》一7 2 救星 有限狀態機

為了消除你心中的疑惑,你可以準備一張紙和一支筆,讓我們一起來畫一張流程圖。對於女主角能夠進行的動作畫乙個 矩形 站立 跳躍 躲避和俯衝。當你可以按下乙個鍵讓主角從乙個狀態切換到另乙個狀態的時候,我們畫乙個箭頭,讓它從乙個矩形指向另乙個矩形。同時在箭頭上面新增文字,表示我們按下的按鈕。恭喜,你剛剛已經...

數學之美 系列十 有限狀態機和位址識別

7 05 2006 09 09 00 上午 發表者 吳軍,google研究員 位址的識別和分析是本地搜尋必不可少的技術,儘管有許多識別和分析位址的方法,最有效的是有限狀態機。乙個有限狀態機是乙個特殊的有向圖 參見有關 圖論的系列 它包括一些狀態 節點 和連線這些狀態的有向弧。下圖是乙個識別中國位址的...

數學之美 系列十 有限狀態機和位址識別

發表者 吳軍,google 研究員 位址的識別和分析是本地搜尋必不可少的技術,儘管有許多識別和分析位址的方法,最有效的是有限狀態機。乙個有限狀態機是乙個特殊的有向圖 參見有關 圖論的系列 它包括一些狀態 節點 和連線這些狀態的有向弧。下圖是乙個識別中國位址的有限狀態機的簡單的例子。馬爾可夫模型 的系...