1

我第一次使用基於類的FSM,對於設置初始狀態的最佳做法我有點困惑。在FSM中設置狀態

我已經添加了一個FSM到我想用來處理(主要)轉換的Screen類。傳統上我會這樣做:

function update(frameTime : Number) : void 
{ 
    switch(_currentState) 
    { 
     case STATE_TRANSITIONING_IN: 
      slideTheButtonsIn(); 
      if(buttonsInPlace == true) 
       changeState(STATE_ACTIVE); 
     break; 
     case STATE_ACTIVE: 
      if(buttonClicked() == true) 
       changeState(STATE_TRANSITIONING_OUT) 
     break; 
     case STATE_TRANSITIONING_OUT: 
      slideButtonsOut(); 
      if(buttonsInPlace == true) 
       removeThisScreen(); 
     break; 
    } 
} 

我認爲這是一個非常標準的方法。

所以我的新狀態的問題是,世衛組織負責在屏幕上創建所有對象?我的Screen是否應該創建所有按鈕和內容,然後將它們傳遞給MainMenuTransitionInState課程,或者MainMenuTransitionState課程是否創建按鈕,然後將它們傳遞給我們,還是讓我完全錯過了標記?

欣賞你的聖人忠告。謝謝!

回答

1

A model-view-controller pattern可能對此有所幫助。

MainMenuScreen(查看)

這是會顯示您的模型。在這裏處理所有與用戶界面相關的對象。直接查詢模型以初始化或更新它們。

MainMenuFsm(控制器)

這是您的視圖的事件處理程序。每當用戶與您的視圖進行交互時,將這些操作轉換爲您的模型的更新。

MainMenuState(型號)

這裏商店中的狀態。