ETH官方钱包

前往
大廳
主題

【Godot】圖鑑頁(yè)面切換-Part1有限狀態(tài)機(jī)

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

本次教學(xué)筆記所使用的Godot版本為v4.2.1,程式語(yǔ)言為GDScript
============================================

【設(shè)計(jì)分析
        今天設(shè)計(jì)了一個(gè)圖鑑頁(yè)面,他擁有生物/食物/成就三個(gè)頁(yè)籤,其中點(diǎn)選生物/食物清單時(shí),可以看到該項(xiàng)目更詳細(xì)的介紹。例如:左側(cè)點(diǎn)選一個(gè)圖片按鈕後,就會(huì)切換至右側(cè)的頁(yè)面。

【State狀態(tài)模式
        State狀態(tài)模式是遊戲開(kāi)發(fā)時(shí)常用的設(shè)計(jì)模式之一,可用來(lái)實(shí)作場(chǎng)景轉(zhuǎn)換、角色AI、連線等,用來(lái)處理那些擁有差不多的執(zhí)行流程,但細(xì)項(xiàng)的實(shí)作會(huì)根據(jù)狀態(tài)而有差異的情況。

        建立數(shù)個(gè)基礎(chǔ)的Node節(jié)點(diǎn),根據(jù)所需要的狀態(tài)個(gè)數(shù)來(lái)添加腳本(先不管視覺(jué)呈現(xiàn)上的效果)。
  • 有限狀態(tài)機(jī),狀態(tài)的持有者,會(huì)根據(jù)情況切換狀態(tài):UI_Dictionary (ui_dictionary.gd)
  • 純粹方便節(jié)點(diǎn)整理,無(wú)其他用途:StateMachine
  • 狀態(tài)介面,可存取狀態(tài)機(jī)上的數(shù)據(jù),擁有數(shù)個(gè)尚未實(shí)作的方法,無(wú)添加在任何節(jié)點(diǎn)上:(dictState.gd)
  • 狀態(tài)實(shí)作,當(dāng)切換到此狀態(tài)時(shí)應(yīng)有的遊戲行為及判斷:Creature(dictState_creature.gd)、CreatureDetail(dictState_creatureDetail.gd)、Food(dictState_food.gd)、FoodDetail(dictState_foodDetail.gd)、Achievement(dictState_achievement.gd)

【ui_dictionary.gd
將狀態(tài)機(jī)命名為UIDictionary;
設(shè)定一個(gè)信號(hào)transitioned,讓狀態(tài)改變時(shí)會(huì)執(zhí)行相應(yīng)的行動(dòng);
利用@export讓我們能在屬性面板指定初始狀態(tài)(後續(xù)測(cè)試時(shí)也方便切換最初要顯示的頁(yè)面);
因?yàn)樵诠?jié)點(diǎn)匯入場(chǎng)景樹(shù)之前無(wú)法使用get_node指令,因此使用@onready讓myState這個(gè)變數(shù)在場(chǎng)景都加載完成之後才指定。
node_update方法用來(lái)更新畫(huà)面上的可視化UI
transition_to則是外界想要切換圖鑑狀態(tài)時(shí),會(huì)使用到的方法。依序執(zhí)行狀態(tài)結(jié)束、狀態(tài)更新、發(fā)布信號(hào)

【dictState.gd
利用get_node在_ready()的時(shí)候取得自己的父節(jié)點(diǎn)(也就是狀態(tài)機(jī)UI_Dictionary)
預(yù)留3個(gè)需要用到的方法node_update()、enter()、exit(),被呼叫時(shí)會(huì)回傳方法
其中enter(_msgL={})是預(yù)留給參數(shù)傳遞使用

【dictState_creature.gd
以3.0a的生物清單為例,在node_update()裡實(shí)作文字的輸出,並嘗試切換一些節(jié)點(diǎn)狀態(tài)

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

        這次僅提到狀態(tài)機(jī)之間的關(guān)聯(lián)性,有盡量節(jié)省不必要的腳本呈現(xiàn)。下一節(jié)會(huì)將可視化的UI加入場(chǎng)景,讓狀態(tài)的切換能更直觀的呈現(xiàn)。另外......有些東西真的是理論看是看懂了,但自己要實(shí)作的時(shí)候會(huì)很茫然啊......好像這樣也對(duì)、那樣也沒(méi)問(wèn)題,很沒(méi)信心自己到底有沒(méi)有真正理解了www

創(chuàng)作回應(yīng)

相關(guān)創(chuàng)作

更多創(chuàng)作