作者cjcat2266 (CJ Cat)
看板Flash
標題[研究] 有限狀態機 - Finite State Machine
時間Sat Jan 24 15:53:55 2009
如題,最近做了有限狀態機(Finite State Machine, FSM)的研究
因為我想要用FSM來做我的個人網站
用不同的state來表示不同頁面
用不同的transition來表示轉場
應該管理起來很輕鬆
(也可以應用在選單、遊戲事件串接上)
這邊有個很簡單的範例
雖然說要做這樣的效果用FSM好像有點殺雞用牛刀
不過這樣展示FSM的功能還蠻方便的
SWF
http://0rz.tw/FDi49
原始檔
http://0rz.tw/TFfCh
FSM簡單來說就是一個擁有多個狀態的"機器"
當FSM處於一個狀態的時候
接收到不同的input訊號會跳到不同的狀態
狀態轉換的過程稱為transition
FSM會觸發使用者的自訂函式
能夠觸發函式的時機有三個:
1.進入一個狀態的時候
2.離開一個狀態的時候
3.經過一個transition的時候
FSM創造state與transition的方式是使用factory pattern
用createState()和createTransition()來產生結構
接下來只要用input()來輸訊號
FSM就會依照這個input訊號來做轉態
上面的範例有6個state,12個transition
(兩個相臨state中間有來回兩條transition關係)
input信號為"cw"和"ccw" (順時針、逆時針轉動)
當我建構好所有的state和transition之後
接下來只要在FSM身上呼叫 input("cw") 或者 input("ccw")
FSM就會根據不同的信號來做動作
這些動作寫在一些函式裡面
而這些函式被呼叫的時機就是之前提到的三個時機
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.88.123
推 shingoliang:酷!不過flex中已經有實做了耶,state(s)/transition 01/24 16:10
→ cjcat2266:這個跟Flex的state不一樣唷,Flex是排版state 01/24 16:19
→ cjcat2266:我的FSM的state可以式抽象的state 01/24 16:19
→ cjcat2266:transition效果也可以自己寫,不侷限於Flex內建的那些 01/24 16:19
推 shingoliang:瞭解!看來要研究一下才知道差異有多少:P 01/24 16:49
推 world9918:話說到180度時顯示current state是120耶 01/25 20:22
→ cjcat2266:真的耶,感謝指正。已經修改好了,原來是少一行code 01/25 23:09
推 CKPILOT:cool!非常實用! 01/27 15:06
→ iapptt:不太懂,理論上web伺服器都是FSM, 甚至電腦不都是FSM嗎? 02/04 22:13
→ cjcat2266:那是理論,這是讓你能夠用FSM結構來設計互動程式 02/04 22:15