แนะนำเกี่ยวกับ阵列

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

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

บทความนี้ครอบคลุมการใช้ เวกเตอร์ , พิมพ์, เพื่อสร้างตัวละครที่พูดได้

ตาราง

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

คอลเลกชัน

มีหลายประเภทของตารางประเภทหนึ่งคือ แอร์ราย์ ซึ่งเก็บรายการของค่าในลำดับเฉพาะเพื่อสร้างคอลเลกชัน สร้างตัวแปรและกำหนดเครื่องหมายเล็บคลาส { }แยกค่าภายในเครือข่ายด้วยจุลภาคเช่นเดียวกับด้านล่าง:

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

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

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

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

  1. ดาวน์โหลดเทมเพลต NPC

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

เขียนคอลเลกชันของบทสนทนา

ขั้นตอนเหล่านี้ใช้อาร์เรย์เพื่อจัดเก็บวลีที่แตกต่างกันสำหรับ NPC ที่จะพูดเมื่อผู้เล่นโต้ตอบกับมัน

  1. ใน สํารวจ , ไปที่ 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!"}

ใช้ดัชนีของอาร์เรย์

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

ภาษาการเขียนโค้ดบางภาษา, เช่น Java, เริ่มดัชนีที่ 0

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

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

ใช้ค่าดัชนีเฉพาะ

ใช้ค่าดัชนีเพื่อกำหนดชิ้นส่วนของบทสนทนาเฉพาะให้กับ 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 จะพูดบรรทัดเดียวกันเสมอน่าเบื่อแทนที่จะใช้ตัวแปรเพื่ออัปเดตค่าดัชนีที่จะใช้

ทุกครั้งที่ผู้เล่นโต้ตอบกับ 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)
    dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
    end
  3. เล่นและยืนยันว่าคุณสามารถเล่นซ้ำและรีสตาร์ทบทสนทนาได้

สรุป

โครงสร้างข้อมูลคือวิธีที่ชุดของข้อมูลจะถูกจัดเก็บLuau ใช้ตารางเพื่อสร้างโครงสร้างข้อมูลแอร์เรย์เป็นประเภทของตารางที่สามารถบันทึกรายการที่จัดเรียงของข้อมูลได้แต่ละค่าภายในอาร์เรย์จะได้รับหมายเลขอินดักซ์ เริ่มจากอินดักซ์ 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)
dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
end
prompt.Triggered:Connect(speak)

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

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

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

ความท้าทายเสริมเติมตัวเลือก

ลองหนึ่งในความท้าทายทางเลือกด้านล่าง

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

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