All tutorials

為你的程式所建立的物件命名

Beginner 10 min engine

一個程式可以建立上百個物件,卻在 Scene Graph 中一個也不顯示。命名正是讓物件出現的動作,這對精靈、文字、3D 物件、燈光和粒子都同樣適用。

你將學到什麼#

你會寫一個小小的 BASIC 程式,看著 Scene Graph 保持空白,儘管它顯然正常運作,接著透過命名讓每個物件出現。到最後你會知道,為什麼這棵樹會隱藏程式建立的大部分東西,以及你要如何選擇它顯示什麼。

開始之前#

  • Engine 是需要贊助的模組。InkwellVectraPDF Studio 是三個免費的模組。
  • 不需要先完成任何教學。以下全部只是一段腳本。
  • Scene Graph 面板保持開啟,緊鄰視口。它就是這個練習的重點。

步驟#

  1. 開啟 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
    
  2. 看看 Scene Graph。精靈出現在畫面上,燈光亮著,但這棵樹什麼都沒顯示。這不是錯誤,而是整個練習的重點。

    提示: 面板上會顯示未命名物件的數量。那個數字,正是你的程式所產生、卻被這棵樹刻意不列出來的輸出。

  3. 為精靈命名。在 SpritePosition 後面加上一行,再按一次 Play

    SpriteName(sprite, "player")
    

    player 出現在樹狀結構裡。畫面上其他東西都沒變:命名不會建立、移動或繪製任何東西,它只是把物件公開出來。

  4. 也為燈光命名,用跟著這個概念一起出現的指令:

    LightName(1, "sun")
    

    現在有兩個項目了。點一個看看:inspector 會跟著切換,就跟你用手動方式放置的物件一模一樣。

  5. 加入粒子並為它命名,這樣你就能看到這個規則不只適用於精靈:

    CreateParticles(1, 200.0, 200.0)
    ParticlesName(1, "smoke")
    
  6. 現在移除這三行命名的程式碼,再按一次 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 裡沒有對應的項目:它們是資源,不是場景物件,命名它們不會在任何地方顯示出來。

更進一步#