All tutorials

ตั้งชื่อให้สิ่งที่โปรแกรมของคุณสร้างขึ้น

Beginner 10 min engine

โปรแกรมหนึ่งสามารถสร้างวัตถุนับร้อยชิ้นโดยไม่แสดงสักชิ้นเดียวใน Scene Graph การตั้งชื่อคือการกระทำที่ทำให้วัตถุหนึ่งปรากฏขึ้นมา และมันใช้ได้กับ sprite ข้อความ วัตถุ 3D ไฟ และอนุภาค

สิ่งที่คุณจะได้เรียนรู้#

คุณจะเขียนโปรแกรม BASIC เล็ก ๆ หนึ่งโปรแกรม ดู Scene Graph ว่างเปล่าอยู่ ทั้งที่โปรแกรมทำงานได้ชัดเจน แล้วจึงทำให้วัตถุแต่ละชิ้นปรากฏขึ้นด้วยการตั้งชื่อให้มัน เมื่อจบบทเรียนนี้ คุณจะเข้าใจว่าทำไมโครงสร้างต้นไม้ถึงซ่อนสิ่งที่โปรแกรมสร้างขึ้นส่วนใหญ่ไว้ และจะเลือกได้ว่าจะให้มันแสดงอะไรบ้าง

ก่อนเริ่มต้น#

  • Engine เป็นโมดูลที่ต้องสนับสนุน Inkwell, Vectra และ PDF 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 sprite อยู่บนหน้าจอ ไฟก็ติดอยู่ แต่โครงสร้างต้นไม้กลับแสดง ไม่มีอะไรเลย นี่ไม่ใช่บั๊ก และนี่คือบทเรียนทั้งหมดของเรื่องนี้

    เคล็ดลับ: แผงนี้แสดงจำนวนวัตถุที่ยังไม่ได้ตั้งชื่อ ตัวเลขนั้นคือผลลัพธ์ของ โปรแกรมคุณที่โครงสร้างต้นไม้จงใจไม่นำมาแสดง

  3. ตั้งชื่อให้ sprite เพิ่มบรรทัดหนึ่งหลัง SpritePosition แล้วกด Play อีกครั้ง:

    SpriteName(sprite, "player")
    

    player จะปรากฏในโครงสร้างต้นไม้ ไม่มีอะไรอื่นเปลี่ยนแปลงบนหน้าจอเลย การตั้งชื่อ ไม่ได้สร้าง เคลื่อนย้าย หรือวาดอะไรทั้งสิ้น มันแค่เผยแพร่ (publish) ข้อมูลเท่านั้น

  4. ตั้งชื่อให้ไฟด้วยเช่นกัน ด้วยคำสั่งที่มาพร้อมแนวคิดนี้:

    LightName(1, "sun")
    

    ตอนนี้มีสองรายการแล้ว คลิกที่รายการใดรายการหนึ่ง อินสเปกเตอร์จะตามไปแสดง เหมือนกับที่มันทำกับวัตถุที่คุณวางด้วยมือทุกประการ

  5. เพิ่มอนุภาค (particles) แล้วตั้งชื่อให้มัน เพื่อให้เห็นว่ากฎนี้ไม่ได้เกี่ยวข้องเฉพาะ กับ sprite เท่านั้น:

    CreateParticles(1, 200.0, 200.0)
    ParticlesName(1, "smoke")
    
  6. ตอนนี้ให้ลบบรรทัดตั้งชื่อทั้งสามบรรทัดออก แล้วกด Play ฉากจะเหมือนเดิมทุกประการ โครงสร้างต้นไม้จะว่างเปล่าอีกครั้ง และจำนวนวัตถุที่ไม่ได้ตั้งชื่อจะกลับไปเป็นสาม

    คำเตือน: ชื่อไม่ใช่ id SpriteName(sprite, "player") เป็นการติดป้ายให้กับ sprite ที่มี id เก็บอยู่ในตัวแปร sprite มันไม่ได้ทำให้คุณค้นหาวัตถุนั้นด้วยป้ายชื่อนี้ ได้ในภายหลัง id ยังคงเป็นตัวจับต้องตัวจริงของคุณ

ผลลัพธ์#

คุณเป็นคนตัดสินใจได้ว่าโปรแกรมของคุณจะแสดงอะไร prop ไฟ และตัวปล่อยอนุภาค (emitter) จะปรากฏภายใต้ชื่อที่คุณเลือก ส่วนวัตถุทางเทคนิคอีกหลายร้อยชิ้นที่โปรแกรมจริงสร้างขึ้นจะไม่มา ขวางทาง

เหตุผลที่กฎนี้มีอยู่#

โปรแกรม BASIC แบบดั้งเดิมสร้างวัตถุขึ้นตลอดเวลา sprite หนึ่งชิ้นต่อกระสุนหนึ่งนัด ข้อความหนึ่งชิ้นต่อหลักคะแนนหนึ่งหลัก ภาพหนึ่งภาพต่อไทล์หนึ่งช่อง ถ้าแสดงทั้งหมดใน Scene Graph มันจะอ่านไม่ออกภายในไม่กี่วินาที และวัตถุสามชิ้นที่คุณสนใจจริง ๆ ก็จะจมหาย ไปในความรก

ดังนั้นโครงสร้างต้นไม้จึงไม่แสดงทุกอย่างแล้วเดาซ่อนส่วนที่เหลือ มันแสดง สิ่งที่คุณตั้งชื่อ และนับจำนวนส่วนที่เหลือไว้ เพื่อไม่ให้อะไรหายไปแบบเงียบ ๆ ตัวกรองนี้เป็นของคุณ ไม่ใช่ของเอนจิน

วัตถุชนิดใดที่ตั้งชื่อได้บ้าง#

คำสั่งสิ่งที่มันตั้งชื่อให้
SpriteName(id, name)sprite
TextName(id, name)วัตถุข้อความ
ObjectName(id, name)วัตถุ 3D
LightName(id, name)ไฟแบบจุดหรือไฟทิศทาง (point หรือ directional light)
ParticlesName(id, name)ตัวปล่อยอนุภาค (particle emitter) แบบ 2D หรือ 3D

เสียง ภาพ memblock และฟอนต์ไม่มีแถวใน Scene Graph เพราะสิ่งเหล่านี้เป็นทรัพยากร (resource) ไม่ใช่วัตถุในฉาก การตั้งชื่อให้สิ่งเหล่านี้จะไม่ทำให้อะไรปรากฏขึ้นที่ไหนเลย

ก้าวต่อไป#