你將學到什麼#
你會寫一個小小的 BASIC 程式,看著 Scene Graph 保持空白,儘管它顯然正常運作,接著透過命名讓每個物件出現。到最後你會知道,為什麼這棵樹會隱藏程式建立的大部分東西,以及你要如何選擇它顯示什麼。
開始之前#
- Engine 是需要贊助的模組。Inkwell、Vectra 和 PDF Studio 是三個免費的模組。
- 不需要先完成任何教學。以下全部只是一段腳本。
- 讓 Scene Graph 面板保持開啟,緊鄰視口。它就是這個練習的重點。
步驟#
-
開啟 Engine,開啟一個空白場景,打開腳本編輯器。貼上以下內容,按下 Play:
image = LoadImage("hero.png") sprite = CreateSprite(image) SpritePosition(sprite, 100.0, 120.0) CreatePointLight(1, 0.0, 5.0, 0.0, 10.0, 255, 255, 255) DO Sync() LOOP -
看看 Scene Graph。精靈出現在畫面上,燈光亮著,但這棵樹什麼都沒顯示。這不是錯誤,而是整個練習的重點。
提示: 面板上會顯示未命名物件的數量。那個數字,正是你的程式所產生、卻被這棵樹刻意不列出來的輸出。
-
為精靈命名。在
SpritePosition後面加上一行,再按一次 Play:SpriteName(sprite, "player")player出現在樹狀結構裡。畫面上其他東西都沒變:命名不會建立、移動或繪製任何東西,它只是把物件公開出來。 -
也為燈光命名,用跟著這個概念一起出現的指令:
LightName(1, "sun")現在有兩個項目了。點一個看看:inspector 會跟著切換,就跟你用手動方式放置的物件一模一樣。
-
加入粒子並為它命名,這樣你就能看到這個規則不只適用於精靈:
CreateParticles(1, 200.0, 200.0) ParticlesName(1, "smoke") -
現在移除這三行命名的程式碼,再按一次 Play。場景完全一樣,樹又變回空的,未命名的數量也回到三。
警告: 名稱不是 id。
SpriteName(sprite, "player")標記的是 id 存在sprite這個變數裡的那個精靈,並不代表你之後可以用這個標籤找到它。id 才是你真正的操作依據。
結果#
你可以決定程式要顯示什麼。一個 prop、一盞燈和一個發射器,會依照你選的名稱出現,而一個真實程式建立的成百上千個技術性物件,則留在看不見的地方。
為什麼有這條規則#
一個經典的 BASIC 程式會不斷建立物件:每顆子彈一個精靈、每個分數位數一個文字、每塊地圖磚一張圖片。把它們全部列出來,會讓 Scene Graph 在幾秒內變得無法閱讀,而你真正在意的那三個物件,反而會淹沒在雜訊裡。
所以這棵樹不會顯示所有東西,也不會靠猜測隱藏其餘部分。它顯示的是你命名的東西,並且會計算其餘的數量,確保沒有任何東西悄悄消失。這個篩選權在你手上,不在引擎手上。
哪些物件可以被命名#
| 指令 | 命名的對象 |
|---|---|
SpriteName(id, name) | 一個精靈 |
TextName(id, name) | 一個文字物件 |
ObjectName(id, name) | 一個 3D 物件 |
LightName(id, name) | 一個點光源或方向光 |
ParticlesName(id, name) | 一個粒子發射器,2D 或 3D |
聲音、圖片、memblock 和字型在 Scene Graph 裡沒有對應的項目:它們是資源,不是場景物件,命名它們不會在任何地方顯示出來。