狀態機 簡單 重要 高可應用性的思想

2022-07-16 15:30:18 字數 1927 閱讀 7208

其實在數位電路中就已經介紹過這種模型,包括後續的「資訊理論」、「隨機過程」等課程中,也介紹到了這個模型中的一些基本概念。可是平時在課堂上學過了,沒有實際應用確實難以記住。這次在師弟xophiix(處看到狀態機一文,發現確實能將這一概念運用到flash的互動開發中。xophiix雖然僅僅是大二的學弟,但是有著非常強烈的創新慾望和實踐經驗。所謂三人行必有我師,這次這個「狀態機」,確實幫了我那個挫的不能再挫的「是男人就下100層」的大忙。

言歸正傳,來介紹如何使用狀態機模型進行開發。

首先,要明確什麼叫做狀態(status)。我不想引用什麼字典裡的解釋,那樣只會將這裡的問題複雜化。舉例說明最方便。就拿我這個遊戲來說,玩家所扮演的小人,就存在三種狀態:小人跑動(move)、小人站立靜止(stand)、小人在空中墜落(falling)。為了配合下面的**例項,我簡記為move, stand, falling,下同。圖中分別用橘黃標示為a,b,c。

狀態的一大特性就是轉化。狀態不是孤立的,換句話說,狀態是變化的,是會互相轉化的,比如,move可以轉化到falling;falling可以轉化到stand。

值得一提的是,轉化有兩條原則:

·轉化本身的邏輯性 - 並非所有的狀態之間都可以任意轉化,這裡stand就不能變化為falling,因為小人不可能站在擋板上不動自己掉下;而falling也不能轉化為move,因為小人掉下的途中不可能跑動(腳踩空),而必須通過一次stand,再跑動。

轉化的外界因素 - 轉化的時候需要乙個外因,這裡四種轉化,我用數字表示為1,2,3,4,意義分別是

1、移動出了擋板,從空中墜落

2、墜落途中掉在擋板上,站立

3、使用者按左、右鍵,或者掉在了有「方向履帶」的擋板上,小人跑動起來

4、使用者停止按鍵並且小人站在非「方向履帶」的擋板上,小人站立

這兩條原則總結完了之後,就好設計程式了。但是在設計程式之前,一定要把這幾個狀態以及轉換原則疏理清晰,如果你連一共有幾種狀態都分不清楚就開始寫**,那肯定有更多的麻煩等著你。

while-switch的方法可能是vc程式設計師最熟悉的了,前文提到的xophiix的blog中可以看到。不過在flash中,還是onenterframe-switch比較方便。畢竟flash是按frame渲染的,用onenterframe的迴圈在資源消耗上有著很大的優勢。**如下,保留了整個小人的action,狀態機核心在中間加粗部分:

getplayer.onenterframe = function()

else if (this.istowardleft)

else

if(key.isdown(key.left))

if(key.isdown(key.right))

switch( statusnow )

break;

case 「move」://移動狀態

if( !this.isonland)

else if( xinc == 0 )

break;

case 「falling」://墜落狀態

if( this.isonland )

break;

default:break;

}//簡單物理模型的建立,參考了ox_darkness師兄@flash8

if( statusnow == 「stand」 )

if( statusnow == 「move」 )

else if ( xinc < 0 )

if( xinc != 0 )

if( statusnow == 「falling」 )

}if( statusnow == 「falling」 )

else if ( xinc < 0 )

if( xinc != 0 )

}if (this._y > sceneh || this._y < -5)

}

狀態機簡單介紹

可以把狀態機的要素分為4個要素,即 現態 條件 動作 次態。現態 和 條件 是因,動作 和 次態 是果。1 現態 是指當前所處狀態 2 條件 又稱為 事件 當條件被滿足時,將會觸發乙個動作,或者執行一次狀態的遷移。3 動作 條件滿足後執行的動作。動作不是必須的,當條件滿足後,也可以不執行任何動作,直...

簡單輕量狀態機

keystate 狀態類 namespace fsm endregion 子狀態名稱拼接符 public const char childsplitchar 狀態名 private string name 狀態名稱 protected string name 符號 if name value 狀態方...

基於狀態機的簡單控制

基於狀態機的簡單控制 公司是做一些簡單的夾具的,大部分功能是幾個按鍵加上幾個電磁閥,再加乙個顯示屏就構成了乙個簡單的控制系統。工控行業一般要求是比較穩定的,所以我需要在啟動電磁閥之後去判斷我的氣缸是否到了指定位置,這樣我們就需要用到了sensor,那麼問題來了 首先我按下了按鍵,氣缸也動作了,接下來...