การแนะนำระเบียบาล Arrays

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

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

บทความนี้ใช้ แมทริค พิมพ์

ตาราง

ตาราง เป็นข้อมูลชนิดที่สามารถรองรับมากขึ้นหลายค่า ในขณะที่ข้อมูลชนิดอื่น ๆ ที่เก็บค่าเดียว ตารางไม่มีขนาดตารางที่ติดตั้งไว้และสามารถรองรับผสมของข้อมูลชนิ

รายการ

มีลักษณะที่แตกต่างกันของตาราง หนึ่งประเภทคือ รายการ ซึ่งเก็บรายการของมูลค่าในลำดับที่กำหนด เพื่อสร้างรายการให้สร้างแป้นของตารางและกำหนดค่าด้วยเครื่องหมาย

local myArray = {"item1", "item2", 10, workspace.Part, myVariable}

การสร้างตัวละครที่พูดคุย

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

โครงการนี้จะใช้แม่พิมพ์ NPC สร้างแล้วซึ่งรวมถึงสคริปที่ส่วนหนึ่งและตรวจจับโปรมปต์ แต่ขาดการแสดงความคิดเห็น

  1. ดาวน์โหลด NPC รุ่น

  2. ใน Explorer นำ NPC โดยการคลิกขวาที่ พื้นที่ทํางาน > ดาวน์โหลดจากไฟล์ และเลือกไฟล์ที่ดาวน์โหลด

การเขียนรายการสนทนา

ขั้นตอนเหล่านี้ใช้แผงค่าเพื่อเก็บคำต่างๆ ให้ NPC พูดเมื่อผู้เล่นใช้งานกับมัน

  1. ใน Explorer ไปที่ NPC > ProximityPrompt > ChatManager

  2. ใน ChatManager ที่มีการกำกับไว้ในสคริปต์, สร้าง รายการว่างเปล่า เพื่อเก็บตัวเลือกการแชท


    -- ทำซ้ำในการแชทเมื่อใช้ปุ่มเรียก
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- เพิ่มรายการที่นี่
    local dialogueArray = {}
    local function speak()
    local dialogue = "I've got one thing to say!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. ภายในแท็ก {} ของแผงที่เพิ่งสร้างขึ้นใหม่ พิมพ์อย่างน้อยสามสตริงของบรรทัดสนทนาที่แยกกับจุลภาค


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}

การใช้ดัชนีรายการ

แต่ละค่าใน mat阵ได้รับเลข index ตัว รหัสดัชนีถูกกำหนดให้กับค่าในลำดับที่รหัสถูกเก็บไว้ ค่าแรกอยู่ที่ดัชนี 1 ค่าที่สองอยู่ที่ดัชนี 2 และเป็นต่อไป

ภาษาบางตัวอย่างเช่น Java เริ่มดัชนีที่ 0

ในรายการที่เพิ่งสร้างขึ้น "Hi" อยู่ที่ดัชนีที่ 1 และ "Goodbye!" อยู่ที่ดัชนีที่ 3

ดัชนีมูลค่า
1สวัสดี
2วันนี้เป็นวันที่ดี!
3ลาก่อน!

ใช้ค่าดัชนีที่กำหนดเฉพาะ

ใช้ค่าดัชนีเพื่อกำหนดชิ้นส่วนบางส่วนของ对话กับ NPC ในการใช้ค่าดัชนีที่เฉพาะเจาะจงให้กับ NPC โปรดเพิ่มค่าในช่องเป็นสองครั้งหลังจากชื่อรายการของแท็งกี้เช่น dialogueArray[1] นั่นคือ

  1. แทนที่ค่าสตริงปกติของตัวแปร dialogue ด้วยค่าดัชนี 2


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. ทดสอบและคลิก NPC ค่าแรงของตัวละครที่สองจะปรากฏในฟองบับในแชท ลองเปลี่ยนรหัสเพื่อทดสอบแต่ละค่าในตาราง

เปลี่ยนแถวการแชท

เมื่อผู้เล่นใช้งานกับ ตัวละครที่ไม่ใช่ผู้เล่นผู้เล่นจะพูดสายเดียวกันเสมอ น่าเบื่อ ใช้แป้นตัวแปรเพื่อปรับปรุงมูลค่าดัชนีที่ใช้

เมื่อผู้เล่นใช้งาน NPC ให้เพิ่มมูลค่าตัวแปรโดย 1 เพื่อแสดงบรรทัดสุดท้ายของการแชท

  1. เพื่อติดตามดัชนีปัจจุบันให้เพิ่มตัวแปรใหม่ที่มีชื่อว่า dialogueIndex ตั้งค่าตัวแปรเป็น 1 เพื่อเริ่มต้นในต้นของรายการ


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local dialogueIndex = 1
  2. ใน speak() ใช้ แทนที่ หมายเลขดัชนีใน dialogueArray[2] ด้วยตัวแปรที่คุณเพิ่งสร้าง


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. ในด้านล่างของฟังก์ชันเพิ่ม 1 ไปยัง dialogueIndex สตริงspeak() ครั้งต่อไป


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. ทดสอบและคลิก NPC เพื่อดูแต่ละสตริง대화จากแมทริค

สังเกตเห็นว่ามี ข้อผิดพลาด ในหน้าต่างการสรุปเมื่อสคริปต์ถึงต้นท้ายของรายการ

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

ขนาดแผง

คุณสามารถใช้ขนาดของรายการเพื่อรู้ว่าเมื่อใดจะต้องรีเซ็ตดัชนีที่ต้องการเป็น 1 ได้ ค้นหาขนาดของรายการโดยการพิมพ์ # โดยไม่มีช่องว่างก่อนชื่อรายการ

ตัวอย่าง: #dialogueArray

ตรวจสอบขนาดของรายการต่อตัวแปรปัจจุบันเพื่อรู้ว่าเมื่อใดที่จะเริ่มต้นใหม่

กำลังเริ่มตัวอีกครั้ง

ใช้ขนาดแผงที่จะตรวจสอบเมื่อเป็นเวลาที่จะกลับไปที่ชิ้นส่วนแรกของการแชท

  1. เพิ่ม if และตรวจสอบว่า dialogueIndex เท่ากับ #dialogueArray ขนาดรวมของค่าย่อนี้ หากเป็นเช่นนั้นให้ตั้ง dialogueIndex เป็น 1


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. หาก dialogueIndex ไม่อยู่ที่ด้านล่าง ยังคงเพิ่ม 1 ไปยัง dialogueIndex อยู่ดี ย้าย dialogueIndex += 1 ภายใต้ประโยคอื่น


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    else
    dialogueIndex += 1
    end
    end
  3. เล่นและยืนยันว่าคุณสามารถวิ่งผ่านและเริ่มต้นการสนทนาใหม่ได้

สรุป

โครงสร้างข้อมูลเป็นวิธีการเก็บรวบรวมข้อมูล ลูกาใช้ตารางเพื่อสร้างโครงสร้างข้อมูล Lua ใช้แท็งก์เพื่อเก็บรวบรวมข้อมูล แต่ละรายการของข้อมูลจะได้รับหมายเลขดัชนี เริ่มตั้งแต่ดัชนี 1 ส่วนล

สคริปต์นี้ใช้รายการสายสนทนาที่เป็นไปได้สำหรับตัวละครที่ไม่เล่นได้ (NPC)

สคริปที่สำเร็จ

-- ทำซ้ำในการแชทเมื่อใช้ปุ่มเรียก
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- เพิ่มรายการที่นี่
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
if dialogueIndex == #dialogueArray then
dialogueIndex = 1
else
dialogueIndex += 1
end
end
prompt.Triggered:Connect(speak)

เคล็ดลับการแก้ปัญหา

หากตัวละครไม่ได้ผ่านรายการสนทนา ลองใช้เคล็ดลับการแก้ปัญหาต่อไปนี้

  • ตรวจสอบ if ที่ว่า dialogueIndex ตั้งคืน 1 ในประโยคอื่น ตรวจสอบว่า dialogueIndex มี 1 เพิ่มเติมที่ตัวเอง
  • เมื่อได้ขนาดของค่าย่อมักจะมีช่องว่างหลังจากเลขที่อยู่ใน # ใน #dialogueArray

ความท้าทายที่อาจเกิดขึ้น

ลองท้าทายหนึ่งในต่างๆ ด้านล่าง

  • เขียนสคริปต์ให้นักพูดคุยของ NPC ไปย้อนกลับผ่านแมทริค ดัชนีการพูดคุยควรเริ่มต้นที่แมทริคและลบออกแทนที่จะเพิ่ม
  • แทนที่จะแสดงบทสนทนาในลำดับ ให้ NPC แสดงบทสนทนาแบบสุ่มในแต่ละครั้งโดยใช้ Random.new() ตัวอย่างสคริปต่อไปนี้รวมอยู่ด้านล่างเพื่ออ้างอิง

local randomGenerator = Random.new()
-- แสดงการแสดงความคิดเห็นใหม่เมื่อ PNJ คลิก
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end