Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
在 Godot 中套用物件導向原則
Godot 提供了兩種方法來建立可重複使用的物件:腳本與場景。這兩種方法技術上來說都算是在定義類別。
儘管如此,許多使用 Godot 的最佳實踐都包含了將物件導向程式設計原則套用到構成遊戲的腳本與場景上。因此,瞭解如何將場景與腳本看作物件是很實用的。
本指南大致解釋了腳本與場景在引擎核心中是如何運作的,來協助你瞭解 Godot 實際是怎麼運作的。
在引擎中腳本是如何運作的
Godot 中提供了一些內建類別,如 Node 。可以通過繼承這些類別來通過腳本建立延伸型別。
這些腳本在理論上來說不是類別,而是用來告訴引擎要在內建類別上進行一系列初始化操作的資源。
Godot 的內部類別有一些向 ClassDB 註冊類別資料的方法。通過 ClassDB 這個資料庫便能在執行時存取類別資訊。ClassDB 包含了如下類別資訊:
屬性。
方法。
常數。
訊號。
ClassDB 即為物件在執行如存取屬性或呼叫方法等特定操作時用來檢查的地方。ClassDB 會檢查資料庫記錄與物件的基礎型別,來確認該物件是否支援要執行的操作。
將 Script 附加到物件上,就會使物件繼承 ClassDB 中可用的方法、屬性與訊號。
備註
即使是不使用 extends 關鍵字的腳本,也會隱含性地自動繼承引擎的基礎 RefCounted 類別。這樣一來,即使沒有在程式碼中使用 extends 關鍵字也能初始化腳本。由於這些腳本是繼承自 Reference ,所以無法附加到 Node 上。
場景
由於場景與類別在行為上有許多相同的地方,因此也可以將場景看作是類別。場景可重複使用、可初始化,而且還是一組可繼承的節點。建立場景就有點類似一個會建立節點並通過 add_child() 將這些節點新增為子節點的腳本。
我們通常會將場景與有腳本的根節點一起使用。因此,場景通常算是腳本中宣告型程式碼的延伸。
場景的內容可以協助定義:
腳本可使用哪些節點。
這些節點如何組織。
這些節點如何初始化。
它們彼此之間連接了哪些訊號。
為什麼這些東西對場景組織來說有這麼重要?因為場景 是 物件。因此,許多在寫程式碼時能套用的物件導向原則也都能套用至場景上:單一職責、封裝等。
場景 永遠是附加到場景根節點的腳本的延伸 ,因此可以將場景視為類別的一部分。
本最佳實踐系列中的許多技術解釋都以此為基礎。