อาร์เรย์ สามารถรวมกับลูป เช่น 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.0
local pathArray = {
workspace.Part1,
workspace.Part2,
workspace.Part3,
}
while true do
-- ทำให้ชิ้นส่วนหายไปจากอาร์เรย์ตามลำดับ
for partIndex = 1, #pathArray do
task.wait(VANISH_RATE)
local whichPart = pathArray[partIndex]
whichPart.CanCollide = false
whichPart.Transparency = 1
end
-- รอหนึ่งวินาทีก่อนทำให้เส้นทางกลับมา
task.wait(1.0)
-- รีเซ็ตเส้นทางโดยทำให้ชิ้นส่วนทั้งหมดสามารถเดินได้อีกครั้ง
for partIndex = 1, #pathArray do
local whichPart = pathArray[partIndex]
whichPart.CanCollide = true
whichPart.Transparency = 0
end
endอาร์เรย์และ 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() รายการสามารถวนซ้ำได้อย่างรวดเร็วโดยไม่ต้องรู้ขนาดของอาร์เรย์