Godot 遊戲引擎指南/訊號和方法
如果你向 Godot 使用者尋求編碼建議,他們經常會說“訊號上移,呼叫下移”。這到底是什麼意思呢?
從場景面板中選擇一個節點。按下檢查器旁邊的“節點”選項卡。將出現一個列表。這些是訊號。
建立一個新場景。按下使用者介面。將其儲存為Signal test.tscn。新增兩個節點:一個按鈕和一個標籤,兩者都是控制的子節點。使用佈局按鈕將按鈕居中到螢幕上。在檢查器中將文字屬性設定為按下我。
現在將指令碼新增到控制根節點(第一個節點)。選擇按鈕。開啟節點面板,雙擊“button_up()”。將彈出一個視窗,其中選擇了場景根節點(控制節點)。文字編輯應該顯示_on_Button_button_up。按下“連線”。
這將建立以下程式碼
func _on_Button_button_up(): pass # Replace with function body.
當訊號button_up發出時,將呼叫此函式。將程式碼print("你按下了我!")新增到該函式中。如果你願意,可以刪除pass # Replace with function body.。
透過按下 F6 執行場景,並滿足該按鈕的願望!
你可以在 GDScript 中使用signal <signal_name> <optional:(argument1: type, argument2: type, ect)>建立自己的訊號。在函式中發出它:emit_signal(<"signal_name">, <argument1>,<argument2 ect.>)。
與訊號一樣重要,呼叫允許發生很多事情。將$Label.text = "你按下了我!"新增到該函式中。這實際上是在設定一個變數,但它仍然被認為是呼叫,因為設定變數使用 setter 函式。更多資訊將在另一章中介紹。
$path是get_node(path)函式的簡寫。Label 是路徑引數。這允許直接操作該名稱的子節點。
這些被稱為節點路徑。它們的工作方式有點像檔案路徑,這是一個常見的例子:$weapon/art.texture = preload("res://assets/weapons/upgraded_sword.png"),並且也可以是相對的,例如(在res://game/player.gd中呼叫)/weapons/upgraaded_sword.tscn。
一個全域性get_node看起來像/root/game/player/weapon/art。
有關更多資訊,請參見GDScript:操作場景樹.
這意味著,如果你正在呼叫另一個節點上的方法,請使用訊號來呼叫父節點(以降低程式碼複雜度),並在呼叫子節點時使用方法(以提高可讀性和自由度)。
- 如何獲取子節點。
- 如何連線訊號。
- 如何設定另一個節點的屬性(使用“.”。你也可以用它來呼叫它們的函式!)
