跳轉到內容

Godot 遊戲引擎指南/訊號和方法

100% developed
來自華夏公益教科書

如果你向 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 函式。更多資訊將在另一章中介紹。

$pathget_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:操作場景樹.


訊號上移,呼叫下移

[編輯 | 編輯原始碼]

這意味著,如果你正在呼叫另一個節點上的方法,請使用訊號來呼叫父節點(以降低程式碼複雜度),並在呼叫子節點時使用方法(以提高可讀性和自由度)。

你學到了什麼

[編輯 | 編輯原始碼]
  1. 如何獲取子節點。
  2. 如何連線訊號。
  3. 如何設定另一個節點的屬性(使用“.”。你也可以用它來呼叫它們的函式!)


1 你用什麼來獲取節點?

$NodeName
get_node("NodeName")
get_child("NodeName")

2 節點路徑是否像檔案路徑?

3 你應該以哪種方式呼叫?

向下
向上


Godot 遊戲引擎指南

入門 [編輯]
安裝
什麼是節點?
程式設計
資源和匯入
訊號和方法
你的第一個遊戲
讓它執行
除錯
輸入
物理
儲存和載入
多人遊戲
讓它看起來更好
UI 皮膚
動畫
高階幫助
伺服器(單例)
平臺特定
最佳化
加密
匯出
外掛
雜項
有用連結
作者和貢獻者
列印版


<-- 上一頁 返回頂部 下一頁 -->


華夏公益教科書