โครงการนี้เป็นตัวอย่างอีกตัวอย่างหนึ่งของการใช้ลูป for ในทางปฏิบัติ สำหรับสะพานนี้ ผู้เล่นจะต้องแตะปุ่มเพื่อทำให้สะพานเดินได้ในระยะเวลาจำกัดก่อนที่จะหายไป เพื่อสร้างตัวจับเวลาและแสดงเวลาที่เหลือให้ผู้เล่น คุณจะใช้ลูป for
ตั้งค่าโครงการ
สะพานนี้สามารถรวมเข้ากับโครงการ Roblox ใด ๆ ที่มีความท้าทายที่มาจากการเคลื่อนไหว เช่น obby
สร้างส่วนประกอบ
หาสถานที่สำหรับสร้างสะพาน เช่น แม่น้ำหรือช่องว่างขนาดใหญ่ใน obby สร้างส่วนประกอบที่มี anchored สามชิ้นดังนี้
- TimerDisplay
- Bridge
- ButtonBridge

เมื่อไม่ทำงาน สะพานจะมีความโปร่งใสบางส่วน เพื่อทำเช่นนี้ ให้เลือก Bridge และเปลี่ยนคุณสมบัติของมัน
- Transparency = 0.8
- CanCollide = False
สร้างการแสดงผลตัวจับเวลา
เมื่อข้ามสะพาน ผู้เล่นจะต้องเห็นจำนวนวินาทีที่เหลือก่อนที่สะพานจะหายไป หนึ่งในวิธีการแสดงภาพหรือข้อความคือการเพิ่มวัตถุที่เรียกว่า Surface GUI ลงในส่วนประกอบ Surface GUIs ยังสามารถใช้เพื่อสร้างป้ายในเกม แถบสุขภาพที่กำหนดเอง และระบบสินค้าคงคลัง บทช่วยสอนนี้จะผ่านไปอย่างรวดเร็ว แต่ข้อมูลเพิ่มเติมสามารถพบได้ในส่วน Tutorials
เลือก TimerDisplay และเพิ่ม SurfaceGui จากนั้นภายใต้ Surface Gui ให้เพิ่ม TextLabel

เลือก Surface GUI ในคุณสมบัติให้ทำการเปลี่ยนแปลงดังนี้:
- เปลี่ยน Face เพื่อให้คุณสามารถเห็นข้อความบนหน้าของตัวจับเวลาในที่ที่ผู้เล่นมองอยู่
เลือก TextLabel ในคุณสมบัติให้ทำการเปลี่ยนแปลงดังนี้:
- ตั้ง Size เป็น {1, 0},{1, 0}.
- ตั้ง TextScaled เป็น true.
- ตั้ง Text ให้ว่างเปล่า ข้อความจะถูกอัปเดตโดยใช้สคริปต์
ตั้งสคริปต์
เมื่อคุณตั้งค่า timer เสร็จแล้ว ให้สร้างสคริปต์เพื่อควบคุมสะพานและแสดงหมายเลขนับถอยหลังให้ผู้เล่น
ในส่วน Bridge ให้เพิ่มสคริปต์ใหม่ชื่อ TimedBridge ในสคริปต์นั้นให้สร้างตัวแปรดังต่อไปนี้
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- ระยะเวลาในการที่สะพานจะคงอยู่local timerDuration = 5
โค้ดการโต้ตอบแบบสัมผัส
ในการใช้สะพาน คุณจะต้องสร้างฟังก์ชันสองฟังก์ชัน หนึ่งฟังก์ชันจะทำให้สะพานเดินได้และแสดงตัวจับเวลา อีกฟังก์ชันจะฟังว่าผู้เล่นแตะปุ่มที่เปิดใช้งานสะพานหรือไม่
สร้างฟังก์ชันใหม่ชื่อ startTimer() พร้อมคำสั่ง print ข้างใน คุณจะใช้คำสั่ง print เพื่อตรวจสอบโค้ดของคุณ
local timerDuration = 5local function startTimer()print("Countdown started")endโค้ดฟังก์ชันชื่อ buttonPressed() เพื่อตรวจสอบว่ามนุษย์สัมผัสปุ่มหรือไม่ ฟังก์ชันนี้ควรรับพารามิเตอร์ partTouched จากนั้นให้มี if statement ว่าง ๆ ถ้าพบมนุษย์ในส่วนนี้
local function startTimer()print("Countdown started")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendเพื่อเริ่มต้นตัวจับเวลา ใน if statement ให้เรียกฟังก์ชัน startTimer()
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendภายใต้ตอนท้ายของ buttonPressed() เชื่อมโยงฟังก์ชัน buttonPressed() กับเหตุการณ์ Touched ของปุ่ม
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)รันโครงการ แตะส่วนและตรวจสอบในหน้าต่างออกเพื่อดูข้อความพิมพ์
เคล็ดลับการแก้ปัญหา
ในจุดนี้ หากสะพานทำงานไม่เป็นไปตามที่ตั้งใจไว้ ให้ลองใช้หนึ่งในวิธีด้านล่าง
ปัญหา: ข้อความแสดงข้อผิดพลาดบอกว่า: "... is not a valid member of workspace".
- ในสคริปต์ TimedBridge ให้ตรวจสอบว่าชื่อส่วนประกอบทั้งหมดสะกดถูกต้องตามที่เห็นใน Explorer
ปัญหา: ไม่สามารถมองเห็นส่วนประกอบได้
- ให้แน่ใจว่าส่วนประกอบทั้งสามถูกตั้งค่าเป็น Anchored
- ตรวจสอบคุณสมบัติ Transparency สำหรับสะพาน
สร้างตัวจับเวลา
ทุกครั้งที่ผู้เล่นก้าวลงบนสะพาน startTimer() จะทำให้สะพานเดินได้และเริ่มตัวจับเวลา เมื่อถึงเวลาเหลือ 0 สะพานจะไม่สามารถเดินได้ ทำให้ผู้ที่ไม่เร็วจนตกลงมา
ทำให้สะพานเดินได้
เพื่อเริ่มต้น สคริปต์จะต้องทำให้สะพานมีความมั่นคง หรือสามารถชนได้ จากนั้นเริ่มตัวจับเวลาจนกว่าจะไม่สามารถเดินได้อีก
เพื่อทำให้สะพานเดินได้ใน startTimer() ให้เปลี่ยนคุณสมบัติ Transparency ของสะพานเป็น 0 (ทึบ) และคุณสมบัติ CanCollide เป็น true
local function startTimer()-- ทำให้สะพานมองเห็นและเดินได้bridge.Transparency = 0bridge.CanCollide = trueendเพื่อสร้างตัวจับเวลาที่นับถอยหลัง ให้สร้างลูป for ด้วยค่าต่อไปนี้
- Control Variable: ตั้งชื่อว่า count ตั้งค่าเป็น timerDuration
- End: 0
- Increment: -1
local function startTimer()-- ทำให้สะพานมองเห็นและเดินได้bridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendเพื่อแสดงตัวจับเวลาให้กับผู้เล่น เปลี่ยนข้อความใน timerText เป็นการแสดง count โดยการพิมพ์ timerText.Text = count ทุกครั้งที่ลูป for ผ่านการทำงานจะแสดงหมายเลขถัดไปในตัวจับเวลาให้กับผู้เล่น
for count = timerDuration, 0, -1 dotimerText.Text = countendใช้ฟังก์ชัน task.wait เพื่อทำให้ลูป for ทำงานเพียงครั้งเดียวในหนึ่งวินาที
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endรันประสบการณ์ เมื่อคุณแตะปุ่ม สะพานควรปรากฏและตัวจับเวลาจะเริ่มต้น จากนั้นจะเสร็จสิ้น
ห้ามให้สะพานเริ่มใหม่
อย่างไรก็ตาม หากคุณเคลื่อนที่ไปรอบ ๆ บนปุ่ม ตัวจับเวลาจะรีสตาร์ทอยู่ตลอดเวลา
เหตุผลคือว่าลูป for ถูกเรียกทุกครั้งที่คุณแตะปุ่มและเริ่มลูป for จากจุดเริ่มต้น เพื่อหยุดไม่ให้ตัวจับเวลาคอยเริ่มใหม่ตลอดเวลา คุณจะต้องเพิ่ม boolean ซึ่งเป็นตัวแปรชนิดหนึ่งที่จะควบคุมว่าฟังก์ชัน startTimer() จะถูกเรียกใช้อีกครั้งหรือไม่
Boolean จะเขียนเหมือนกับตัวแปรอื่น ๆ แต่แทนที่จะใช้ตัวเลขหรือสตริง พวกมันจะตั้งค่าเป็น true หรือ false เท่านั้น ในกรณีนี้ สคริปต์จะใช้ boolean เพื่อตรวจสอบว่าตัวจับเวลากำลังทำงานอยู่หรือไม่ก่อนที่จะเริ่มมัน
ที่ด้านบนของสคริปต์ของคุณ ใต้ตัวแปรของคุณ สร้างตัวแปรชื่อ timerActive และตั้งค่าเป็น false เนื่องจากยังไม่มีใครกดปุ่ม
local timerDuration = 5local timerActive = falselocal function startTimer()เพื่อให้แน่ใจว่าตัวจับเวลาเริ่มต้นเมื่อ boolean timerActive เป็น false เพิ่มเงื่อนไขที่สองใน if statement ใน buttonPressed()
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendเพื่อให้ startTimer() ไม่ทำงานอีกครั้งก่อนที่ตัวจับเวลาจะหมด ให้ตั้งค่า boolean timerActive เป็น true
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueในฟังก์ชัน startTimer() หลังจากลูป for ให้ตั้งค่าคุณสมบัติสะพานกลับเป็นต้นฉบับด้วยการเปลี่ยนความโปร่งใสของสะพานเป็น 0.8 และ CanCollide เป็น false
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- ลูป for ที่นับถอยหลังจาก timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- ทำให้สะพานไม่เดินได้bridge.Transparency = 0.8bridge.CanCollide = falseendอีกสิ่งหนึ่งในการรีเซ็ตสะพานคือการเปลี่ยน timerText เป็นสตริงว่างเหมือนเมื่อก่อน จากนั้นตั้งค่า boolean timerActive เป็น false
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseทดสอบการเล่นและตรวจสอบให้แน่ใจว่าสะพานสามารถใช้ได้หลายครั้ง
สคริปต์สะพานที่มีเวลาที่เสร็จสมบูรณ์
local bridge = script.Parent
-- รับปุ่มตามที่พิมพ์ไว้ใน Explorer
local button = workspace.ButtonBridge
-- รับส่วนประกอบสำหรับการแสดงผล
local timerPart = workspace.TimerDisplay
-- รับข้อความที่จะแสดงตัวจับเวลา
local timerText = timerPart.SurfaceGui.TextLabel
-- ระยะเวลาที่ผู้เล่นต้องข้ามสะพาน
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- ลูป for ที่นับถอยหลังจาก timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- ทำให้สะพานไม่เดินได้
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)
สรุป
ลูปสามารถรวมกันกับวิธีการโต้ตอบที่แตกต่างกันเพื่อสร้างช่วงเวลาที่สนุกสนานในเกม ในบทช่วยสอนนี้ สะพานที่มีเวลาได้รับการสร้างขึ้นโดยใช้ลูป for ที่ทำงานเป็นการนับถอยหลัง ในระหว่างการนับถอยหลัง ผู้เล่นจะมีเวลาจำกัดในการข้ามสะพาน