Re: [程式] Godot node/scene structure
推Godot 還有web版本 雖然我沒用過
補充一下血與淚
※ 引述《meowyih (meowyih)》之銘言:
: 1. Godot 裡的最基本元素是 Node,概念上等同 C++ Class
Godot的基底是Object, Node繼承Object
原始碼
object.h
class Object {
node.h
class Node : public Object {
這點很重要, Node有很多成員
如果新增的Class不需要被畫出來, 盡量避免繼承Node
離題一下, 通常新的Class也不會繼承Object 因為使用Object要自己free()
有一個繼承Object的Class Reference
Reference在沒有被使用的狀況下會自己free()
或是使用繼承Reference的Class Resource
這個Reference不是C++的Reference
在GDScript中 所有非core types(int,float...)的變數都是傳Reference 但是更離題了
: 11. 在 Runtime (in script) 要在某個 Node 下加入自定義的 root Node (i.e. scene)
: 在 Node's script 下先宣告一個 PackedScene name
: export (PackedScene) var MyNode
: 然後把 MyNode 這名字跟你要實體化的 scene 做連結,
: 連結方法是到右上方的 Inspector panel 裡 Script Variable -> MyNode
: 連結完後再回到 script 寫
: var child_node = MyNode.instance()
: add_child( child_node )
: *從 C++ 的角度,instance() 和 new() 名字不一樣,
: 但做得事好像沒差別?
: 有人對這疑惑的說法是 new() 是實體化一個 Class
: instance() 除了實體化 Class,還實體化了 scipt
: 內定義的 member variable 與 node 裡面的 child nodes,
: 某個角度看還是有不同的。
instance()是Class PackedScene的成員
PackedScene 是 scene(.tscn)檔案的介面
在儲存scene的時候 PackedScene會記下這個scene中child nodes的資料*註1
如properties, connections, index 然後存成scene(.tscn)檔案
instance()時, PackedScene會用這些資料, 重新經歷new(), set()...等過程恢復原狀
PackedScene不一定要經過Editor *註2
使用 export (PackedScene) var MyNode 然後在Editor選擇檔案的過程等於是
var path:String = "res://MyNode.tscn"
var MyNode:PackedScene = load(path)
var child_node:Node = MyNode.instance()
硬是要塞成一行就是var child_node = load(path).instance()
但是建議還是檢查一下load有沒有成功
註1: 嚴格來說不是child nodes, 因為是用child node的owner來判斷要不要存起來
註2: 因為只有註1只好補一個註2, export是讓Script的變數顯示在Inspector的方式
括號內是這個變數在Inspector中顯示的型別
--
Sent from my B.B.Call
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.40.146 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1620225563.A.ABD.html
推
05/05 23:14,
3年前
, 1F
05/05 23:14, 1F
推
05/06 13:23,
3年前
, 2F
05/06 13:23, 2F
推
05/08 07:56,
3年前
, 3F
05/08 07:56, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章
32
102