1. 程式人生 > >FSM:網路遊戲開發中的有限狀態機(實踐篇)

FSM:網路遊戲開發中的有限狀態機(實踐篇)

上一篇文章《FSM:網路遊戲開發中的有限狀態機(理論篇)》中,講解了FSM的基礎知識。這裡,我結合圖形及具體例子,講解下FSM在實際開發中的運用。

首先,圖解下上篇文章中提到的各種action。

1.InputAction:某狀態下收到某事件,輸出相應動作。這裡不發生狀態變更,只是對輸入事件的一個響應。屬於瞬時動作。


2.LeaveAction:離開某一狀態時的相應動作。這個動作以後,到達下一狀態。


3.TransferAction:某一狀態到另一狀態過程中的事件/動作。state1由於事件/動作action,轉換為state2.它其實是EntryAction與LeaveAction的結合。


4.EntryAction:進入某一狀態的動作/事件。


設計一個狀態機,最重要的部分是設計一個良好的狀態圖,這個狀態圖能在程式碼中被嚴謹清晰的解析出來。所以其實我們關鍵要做兩件事,一是設計合理的狀態圖,二是完成狀態圖的解析。下面結合遊戲系統的一些程式碼進行這方面的講解。

遊戲中的裝備系統,我們可以簡單劃分為上裝狀態(installState)與初始(下裝)狀態(standbyState)。狀態劃分程式碼如下:

  1. standbyState={  
  2.         event={[EquipEvents.CS_Install]="verifyInstall",  
  3.         },  
  4.         target={[EquipEvents.CS_Install]="installState",  
  5.         },  
  6.         action={  
  7.             entryAction={},  
  8.             leaveAction={},     
  9.             transferAction={},  
  10.             inputAction={[EquipEvents.S_Fix]="fix",[EquipEvents.S_SpecialFix]="specialFix"},  
  11.             timeOut={},  
  12.         },  
  13.     }  

  1. installState={  
  2.         event={[EquipEvents.CS_Uninstall]="verifyUninstall",  
  3.               },  
  4.         target={[EquipEvents.CS_Uninstall]="standbyState",  
  5.                },  
  6.         action={  
  7.             entryAction={"install",},  
  8.             leaveAction={"uninstall"},  
  9.             transferAction={},  
  10.             inputAction={[EquipEvents.S_Fix]="fix",[EquipEvents.S_SpecialFix]="specialFix"},  
  11.             timeOut={},  
  12.                },  
  13.     }  

剛開始裝備處於standbyState,收到上裝事件EquipEvents.CS_Install後,變為installState。狀態圖的解析按以下流程進行:

1.判斷是否存在下一狀態,如果不存在,即做inputAction。因為收到的事件在這裡面無對映,並且存在下一狀態installState,所以這個action不做事。

2.存在下一狀態。做leaveAction。無對映,不做事。

3.做transferAction。無對映,不做事。

4.以上都做完後,狀態變為下一狀態,即installState。開始做entryAction。這裡因為我們已經到達installState,所以entryAction要去installState中找。發現存在一個動作install,於是開始做上裝這個動作。

至此,完成上裝過程。另外,在installState中,我們去修理裝備(fix),狀態機的解析只做inputAction後,就結束,只做fix這個動作,並不改變狀態,屬於瞬時過程。

相關推薦

FSM:網路遊戲開發有限狀態實踐篇

上一篇文章《FSM:網路遊戲開發中的有限狀態機(理論篇)》中,講解了FSM的基礎知識。這裡,我結合圖形及具體例子,講解下FSM在實際開發中的運用。首先,圖解下上篇文章中提到的各種action。1.InputAction:某狀態下收到某事件,輸出相應動作。這裡不發生狀態變更,只

java遊戲開發雜談 - 有限狀態

出現 範圍 pri nta widget 定義 ESS rpg遊戲 log 在不同的階段,遊戲所運行的邏輯、所顯示的界面,都是不同的。 以五子棋舉例,遊戲開始、遊戲中、勝負已分,對應的界面和邏輯都不同。 在遊戲中,又分為:自己下棋、對方下棋、遊戲暫停、悔棋等多個狀態。

獨立項目-角色控制器-有限狀態FSM

技術分享 OS pos .com com 過渡 動畫過渡 unity 狀態機   學習內容:     Unity5的新動畫系統       1.動畫導入 分動畫       2.創建動畫狀態機       3.設置動畫過渡 設置動畫跳轉條件       4.動畫重定向 獨立

有限狀態FSM的設計

有限狀態機(FSM)的設計_zhangxianhe  有限狀態機(FSM)是一種常見的電路,由時序電路和組合電路組成。  設計有限狀態機的第一步是確定採用Moore 狀態機還是採用Mealy 狀態機。 Mealy 型:狀態的轉變不僅和當前狀態有關,而且跟各輸入訊號有關; Moo

有限狀態FSM寫法的個人總結一段式,二段式,三段式

      狀態機描述時關鍵是要描述清楚幾個狀態機的要素,即如何進行狀態轉移,每個狀態的輸出是什麼,狀態轉移的條件等。具體描述時方法各種各樣,最常見的有三種描述方式:      (1)一段式:整個狀態機寫到一個always模組裡面,在該模組中既描述狀態轉移,又描述狀態的輸入

有限狀態FSM讀書筆記

有限狀態機(Finite-state machine)又稱有限狀態自動機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。 有限狀態機FSM的實現 1.用而(開關/箱)或(如果/其他)實現簡單粗暴,適合簡單的小型狀態機; 2.用設計模式中的state pattern,把複

使用有限狀態FSM解釋shell 命令

一、有限狀態機(Finite State Machine,FSM)是表示有限個狀態及在這些狀態之間的轉移和動作等行為的數學模型,在計算機領域有著廣泛的應用。FSM一個常見的應用就是用來負責Parser複雜的資料結構,比如解釋URI協議(uri-rfc239、ur

Unity3D有限狀態FSM學習筆記【7】使用例項

using UnityEngine; using System.Collections; public class TestUIState : MonoBehaviour { public static EventSystem.Dispatcher Events = new EventSystem.Di

Unity3D有限狀態FSM學習筆記【3】FSState類

本系列筆記轉載自遊戲蠻牛專欄作家Jackel的論壇文章,詳細介紹了FSM的建立與使用,特與眾分享。連結:http://www.manew.com/thread-37136-1-1.html 該類主要是狀態的基本操作及事件的新增與觸發。程式碼如下: using System;

有限狀態FSM的設計與實現

轉自:http://www.cnblogs.com/chencheng/archive/2012/06/28/2564336.html 分層狀態機的設計: 對於狀態較多的狀態機,通常的設計會維護一個龐大的二維矩陣,所有狀態耦合在一起,這往往導致維護困難,由於可能存在許

可配置語法分析器開發紀事——構造一個真正能用的狀態

上一篇文章對大部分文法都構造出了一個使用的狀態機了,這次主要來講右遞迴的情況。右遞迴不像左遞迴那麼麻煩,因為大部分右遞迴寫成迴圈也不會過分的讓語法樹變得難以操作,不過仍然有少數情況是我們仍然希望保留遞迴的語法樹形狀,譬如C++的連等操作,因此這裡就來講一下這個問題。 右遞迴是怎麼形成的呢?在這裡我

Unity 有限狀態Finite State Machine的理解 與 實現簡單的可插拔PluggableAI指令碼物件。

#Unity 有限狀態機(Finite State Machine)的理解 與 實現簡單的可插拔AI指令碼物件。   一般的遊戲AI都是使用狀態機的設計模式來實現的。發現官方有教程,就跟了一遍,這裡就總結一下。   先簡單說一下狀態模式。就是根據當前狀態

為什麽開發逐漸拋棄jsp

用戶體驗 大量 gmv 但是 jboss bug 是個 jsp 行業 以前的項目大多數都是java程序猿又當爹又當媽,又搞前端(ajax/jquery/js/html/css等等),又搞後端(java/mysql/Oracle等等)。 隨著時代的發展,漸漸的許多大中小公司開

開發的輔助工具

開發效率 查看 嵌入 但是 程序引導 lib 錯誤 main -a 今天我們來看一看開發中的輔助工具,那麽什麽是開發環境呢?在我們的印象中,開發環境就指的是編寫代碼的環境。其實不然,開發環境包括三大部分:構建環境、調試環境以及測試環境。構建環境便指得是代碼編

遊戲開發】關於Direct X繪製蝙蝠著色器

//D3D相容庫,包含對系統的相容以及Directx庫 #include "DXUT.h" //攝像機 #include "DXUTcamera.h" //設定對話 #include "DXUTsettingsdlg.h" //音樂 #include "SDKmisc.h" //資源 #in

unity遊戲開發之ULua框架介紹

1.SimpleFramework框架配置檔案 (1)AppConst 檔案    在AppConst.cs檔案中配置了很多專案開發過程中,需要使用到的“公共常量資訊”。指令碼內的常量都有中文備註。所在位置是:Scripts/ConstDefine/AppConst.cs

unity遊戲開發之ULua框架介紹

1.基礎介紹 ①ULua 整合開發環境叫做:SimpleFramework,SimpleFramework 分為NGUI 和UGUI兩個版本,區別是NGUI 版本的框架資源中含有NGUI 這個外掛。SimpleFramework 本身不是Unitypackage 格式,而是一個Unity3D的專

python opencv3.x支援向量svm模型儲存與載入問題

親自驗證,可以解決svm的模型載入問題:     import numpy as np     from sklearn import datasets         &nb

詞法分析——有限狀態自動機FA

舉個例子 在上圖中, Σ\SigmaΣ表示自動機可以識別的所有的不同的字元的集合。Σ=a,b\Sigma = {a,b}Σ=a,b S 是狀態集,在這裡只有三種狀態,所以 S = {0, 1, 2} q0q_0q0​是初始狀態,我們一般約定只有一個單向箭頭的

Unity遊戲開發教程:飛機大戰

Unity版本:Unity 2018.2.14f1 新建專案 File -> New project -> 輸入Project name -> Preate project 匯入飛