ETH官方钱包

前往
大廳
主題

【Godot】圖鑑頁面切換-Part1有限狀態機

小短腿 | 2024-04-26 14:22:20 | 巴幣 110 | 人氣 95

本次教學筆記所使用的Godot版本為v4.2.1,程式語言為GDScript
============================================

【設計分析
        今天設計了一個圖鑑頁面,他擁有生物/食物/成就三個頁籤,其中點選生物/食物清單時,可以看到該項目更詳細的介紹。例如:左側點選一個圖片按鈕後,就會切換至右側的頁面。

【State狀態模式
        State狀態模式是遊戲開發時常用的設計模式之一,可用來實作場景轉換、角色AI、連線等,用來處理那些擁有差不多的執行流程,但細項的實作會根據狀態而有差異的情況。

        建立數個基礎的Node節點,根據所需要的狀態個數來添加腳本(先不管視覺呈現上的效果)。
  • 有限狀態機,狀態的持有者,會根據情況切換狀態:UI_Dictionary (ui_dictionary.gd)
  • 純粹方便節點整理,無其他用途:StateMachine
  • 狀態介面,可存取狀態機上的數據,擁有數個尚未實作的方法,無添加在任何節點上:(dictState.gd)
  • 狀態實作,當切換到此狀態時應有的遊戲行為及判斷:Creature(dictState_creature.gd)、CreatureDetail(dictState_creatureDetail.gd)、Food(dictState_food.gd)、FoodDetail(dictState_foodDetail.gd)、Achievement(dictState_achievement.gd)

【ui_dictionary.gd
將狀態機命名為UIDictionary;
設定一個信號transitioned,讓狀態改變時會執行相應的行動;
利用@export讓我們能在屬性面板指定初始狀態(後續測試時也方便切換最初要顯示的頁面);
因為在節點匯入場景樹之前無法使用get_node指令,因此使用@onready讓myState這個變數在場景都加載完成之後才指定。
node_update方法用來更新畫面上的可視化UI
transition_to則是外界想要切換圖鑑狀態時,會使用到的方法。依序執行狀態結束、狀態更新、發布信號

【dictState.gd
利用get_node在_ready()的時候取得自己的父節點(也就是狀態機UI_Dictionary)
預留3個需要用到的方法node_update()、enter()、exit(),被呼叫時會回傳方法
其中enter(_msgL={})是預留給參數傳遞使用

【dictState_creature.gd
以3.0a的生物清單為例,在node_update()裡實作文字的輸出,並嘗試切換一些節點狀態

-------參考資料-------
FINITE STATE MACHINE IN GODOT --- Nathan Lovato(2021/01/28)
============================================

        這次僅提到狀態機之間的關聯性,有盡量節省不必要的腳本呈現。下一節會將可視化的UI加入場景,讓狀態的切換能更直觀的呈現。另外......有些東西真的是理論看是看懂了,但自己要實作的時候會很茫然啊......好像這樣也對、那樣也沒問題,很沒信心自己到底有沒有真正理解了www

創作回應

相關創作

更多創作