這篇講解如何使用第二篇中寫好的類。
我們使用的是遊戲角色的移動、跳躍、攻擊、待機四個狀态來講,那麼我們要建構出這四個狀态,需要設計的模型是什麼呢?
需要設計一個角色類、一個驅動角色執行個體的運作環境<Unity的MonoBehaviour就行了>。
那我們設計角色類,角色類中持有四個狀态類的執行個體、一個狀态機執行個體。
首先是四個狀态類:
移動狀态類(繼承State類)
移動狀态類中持有:
移動狀态到跳躍的狀态轉換執行個體、移動狀态到攻擊的狀态轉換執行個體、移動狀态到待機的狀态轉換執行個體
其中移動狀态到跳躍狀态需要考慮設計是否能在移動狀态中跳躍,是否能在移動狀态中實行攻擊,是否能在移動狀态中待機(當然不能在移動狀态中待機了,邊移動邊待機是什麼鬼)。
跳躍狀态類(繼承State類)
跳躍狀态類中持有:
跳躍狀态到其他三個狀态類的轉換執行個體
攻擊狀态類(繼承State類)
攻擊狀态類中持有:
攻擊狀态到其他三個狀态類的轉換執行個體
待機狀态類(繼承State類)
待機狀态類中持有:
待機狀态到其他三個狀态類的轉換執行個體
然後在每個狀态轉換類中寫判斷條件,一般需要持有外部的判斷對象,是以需要把外部的判斷對象傳入,比如實作這幾個狀态的轉換判斷,我們給角色類設計一個接受外部輸入的屬性<string keyBoard>,那麼我們就要把角色類的執行個體傳入所有狀态轉換執行個體中去,通過判斷角色類的<keyBoard>屬性做出轉換狀态的判斷。
然後我們要在角色類的初始化中,把這些狀态類、狀态轉換類、狀态機類都初始化完。然後驅動狀态機開始運作。于是整個狀态機就跑起來了。
但是這樣大家發現一個問題沒有,就是狀态越多,狀态轉換越多,并且是呈 n*(n-1)增長,雖然後面好維護,但是這樣寫的話,也會使狀态轉換類越來越多。我正在思考怎麼減少這些狀态轉換類的數量。歡迎大家提出意見和建議,一起提高。
這篇把使用原理講了,下篇給代碼。