อาเรย์ สามารถรวมกับลูป เช่น while และ for เพื่อทำซ้ำโค้ดเดียวกันสำหรับค่าที่ถูกดัชนีแต่ละค่า ตัวอย่างเช่น การเทเลพอร์ตผู้เล่นแต่ละคนในอาเรย์ไปยังสถานที่ใหม่ หรือทำให้อาเรย์ของชิ้นส่วนติดไฟ
เพื่อสำรวจการวนลูปผ่านอาเรย์ สร้างสะพานที่หายไปในที่นั้น โดยมีชิ้นส่วนถูกวางลงในอาเรย์และทำให้มันหายไปทีละหนึ่ง
วนลูปผ่านอาเรย์
สำหรับโปรเจ็กต์นี้ หา หรือสร้างชุดของชิ้นส่วนสามชิ้นเพื่อทำให้หายไป ชิ้นส่วนทั้งหมดต้องถูกยึด
สร้างชิ้นส่วนสามชิ้น ตั้งชื่อชิ้นส่วนตามลำดับที่ควรจะหายไป ได้แก่ Part1, Part2, Part3
ใน ServerScriptService ให้แทรกสคริปต์ใหม่และสร้างอาเรย์เพื่อจัดเก็บชิ้นส่วน
local pathArray = {}ในแต่ละบรรทัด ให้พิมพ์ชื่อของชิ้นส่วนตามลำดับที่ควรจะหายไป การใช้บรรทัดใหม่สำหรับแต่ละค่าจะทำให้อ่านง่ายขึ้น
local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3,}
ใช้ลูป for กับอาเรย์
ใช้ลูป for เพื่อไปผ่านอาเรย์และควบคุมว่าชิ้นส่วนควรหายไปเร็วแค่ไหนในลำดับที่ชิ้นส่วนถูกดัชนีอยู่ในอาเรย์
เพื่อควบคุมว่าชิ้นส่วนจะหายไปบ่อยแค่ไหนในระยะเวลาหลายวินาที ให้สร้างตัวแปรชื่อว่า VANISH_RATE สำหรับการทดสอบ ควรรักษาไว้ในจำนวนที่เล็กที่สุด
local VANISH_RATE = 1.5local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3}สร้างลูป for ด้วยสิ่งต่อไปนี้: เริ่มต้น: partIndex = 1 ดัชนีของค่าตัวแรกในอาเรย์ สิ้นสุด: #pathArray ขนาดของอาเรย์นั้น
for partIndex = 1, #pathArray doendเพื่อให้มีการหน่วงเวลาก่อนที่ชิ้นส่วนจะหายไป ให้เพิ่ม task.wait() โดยใช้ VANISH_RATE ในลูป
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)endเพื่อให้ชิ้นส่วนหายไป ให้สร้างตัวแปรใหม่ชื่อว่า whichPart และตั้งค่าให้เท่ากับ partsArray[partIndex] จากนั้น เพื่อให้ชิ้นส่วนนั้นหายไป ให้ตั้งค่า CanCollide ของมันเป็น false และ Transparency เป็น 1
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1endตรวจสอบว่าชิ้นส่วนของเส้นทางหายไปตามเวลา
เคล็ดลับการแก้ปัญหา
หากสะพานไม่หายไป ให้ตรวจสอบปัญหาที่เป็นไปได้ด้านล่าง:
ปัญหา: ชิ้นส่วนหายไปเร็วเกินไปหรือหายไปทั้งหมดในตอนเริ่มต้น
- ขึ้นอยู่กับความเร็วที่ตัวละครของคุณโหลดประสบการณ์ ชิ้นส่วนแรกอาจจะไม่สามารถมองเห็นได้แล้ว เพื่อแก้ไขปัญหานี้ ให้เพิ่มการรอเล็กน้อย เช่น task.wait(2) ที่ด้านต้นของสคริปต์
เขียนลูปที่สอง
ในขณะนี้ ชิ้นส่วนหายไปตลอดไป เพื่อให้มันกลับมาอีกครั้ง ให้สร้างลูป for ที่สองที่จะไปผ่านแต่ละชิ้นส่วนและทำให้ทุกชิ้นส่วนกลับมาใช้งานได้ทันที
หลังจากลูปแรก ให้เพิ่ม task.wait() เพื่อสร้างการหน่วงระยะเวลาสั้น ๆ ก่อนไปยังเส้นทางที่กลับมา
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1endtask.wait(1)ทำด้วยตัวเอง ลองเขียนลูป for ที่สองเพื่อทำให้เส้นทางกลับมาใช้งานได้อีกครั้งโดยการเปลี่ยนแปลงค่าของ CanCollide ของแต่ละชิ้นส่วนเป็น true และ Transparency เป็น 0 เมื่อเสร็จแล้ว ให้ตรวจสอบงานของคุณกับโค้ดด้านล่าง
-- รีเซ็ตเส้นทางโดยทำให้ชิ้นส่วนทั้งหมดกลับมาใช้งานได้อีกครั้งfor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endทดสอบโปรเจ็กต์เพื่อยืนยันว่าชิ้นส่วนทั้งหมดหายไปแล้วจะกลับมา
ทำซ้ำด้วยลูป while
ชิ้นส่วนจะหายไปและกลับมา แต่เพียงครั้งเดียว เพื่อให้โค้ดยังคงทำซ้ำ ให้ซ้อนโค้ดทั้งหมดไว้ภายในลูป while
ที่ด้านล่างของสคริปต์ ให้สร้างลูป while true do ใหม่ จากนั้น ย้ายทั้งสอง ลูป for ไปยังลูป while
while true do-- ทำให้ชิ้นส่วนหายไปจากอาเรย์ตามลำดับfor partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end-- รอประมาณหนึ่งวินาทีก่อนที่จะทำให้เส้นทางกลับมาtask.wait(1)-- รีเซ็ตเส้นทางโดยทำให้ชิ้นส่วนทั้งหมดกลับมาใช้งานได้อีกครั้งfor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endendตรวจสอบว่าชิ้นส่วนทั้งหมดหายไปแล้วกลับมา
คุณสามารถดาวน์โหลดเวอร์ชันที่เสร็จสมบูรณ์ของโปรเจ็กต์นี้
สคริปต์ที่เสร็จสมบูรณ์local VANISH_RATE = 1.0local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3,}while true do-- ทำให้ชิ้นส่วนหายไปจากอาเรย์ตามลำดับfor partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end-- รอประมาณหนึ่งวินาทีก่อนที่จะทำให้เส้นทางกลับมาtask.wait(1.0)-- รีเซ็ตเส้นทางโดยทำให้ชิ้นส่วนทั้งหมดกลับมาใช้งานได้อีกครั้งfor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endend
อาเรย์และ ipairs()
ipairs() ใช้ร่วมกับ อาเรย์ "i" ใน ipairs() ย่อมาจาก "ดัชนี" สามารถใช้ ipairs() เพื่อทำซ้ำการดำเนินการอย่างรวดเร็วกับวัตถุจำนวนมาก เช่น โฟลเดอร์ที่เต็มไปด้วยชิ้นส่วน
นี่จะแสดงให้เห็นโดยการเพิ่มอนุภาคลงในโฟลเดอร์ของชิ้นส่วนทั้งหมดอย่างรวดเร็ว
ใน Workspace ให้สร้างโฟลเดอร์ชื่อ PartsFolder เพิ่มชิ้นส่วนตามที่คุณต้องการ
ใน ServerScriptService ให้สร้างสคริปต์ใหม่และอ้างอิงโฟลเดอร์
ใช้ GetChildren() เพื่อทำการดึงอาเรย์ที่บันทึกรายการของวัตถุทั้งหมดในโฟลเดอร์โดยอัตโนมัติ
local partsFolder = workspace.PartsFolder-- รับอาเรย์ที่บันทึกรายการชิ้นส่วนใน PartsFolderlocal partsArray = partsFolder:GetChildren()ใช้ in ipairs(ArrayToUse) ร่วมกับลูป for เพื่อไปผ่าน partsArray และเพิ่มอนุภาค
สคริปต์ที่เสร็จสมบูรณ์-- รับอาเรย์ที่บันทึกรายการชิ้นส่วนใน PartsFolderlocal partsArray = partsFolder:GetChildren()-- เพิ่มอนุภาคลงในทุกชิ้นส่วนในอาเรย์for index, part in ipairs(partsArray) dolocal particles = Instance.new("ParticleEmitter")particles.Parent = partend
ทดสอบการเล่นเกมและดูอนุภาคลอยขึ้นจากทุกชิ้นส่วนในโฟลเดอร์
สรุป
ลูปสามารถรวมกับอาเรย์เพื่อทำงานกับค่าใดๆ อย่างรวดเร็ว หากคุณต้องการควบคุมอย่างแม่นยำว่ามีอะไรเกิดขึ้นกับชิ้นส่วนบางชิ้นและตามลำดับใด อาเรย์จะต้องถูกกำหนดให้มีค่าที่เฉพาะเจาะจง
ในการทำงานกับชิ้นส่วนจำนวนมากที่ไม่เกี่ยวกับลำดับ สามารถใช้ GetChildren() เพื่อสร้างอาเรย์ของลูกของวัตถุ โดยการใช้ ipairs() รายการสามารถถูกวนซ้ำได้อย่างรวดเร็วโดยไม่ต้องรู้ขนาดของอาเรย์