การฝึกฝนลูป - สร้างสะพานที่มีเวลา

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

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

ตั้งค่าโครงการ

สะพานนี้สามารถรวมเข้ากับโครงการ Roblox ใด ๆ ที่มีความท้าทายที่มาจากการเคลื่อนไหว เช่น obby

สร้างส่วนประกอบ

  1. หาสถานที่สำหรับสร้างสะพาน เช่น แม่น้ำหรือช่องว่างขนาดใหญ่ใน obby สร้างส่วนประกอบที่มี anchored สามชิ้นดังนี้

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. เมื่อไม่ทำงาน สะพานจะมีความโปร่งใสบางส่วน เพื่อทำเช่นนี้ ให้เลือก Bridge และเปลี่ยนคุณสมบัติของมัน

    • Transparency = 0.8
    • CanCollide = False

สร้างการแสดงผลตัวจับเวลา

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

  1. เลือก TimerDisplay และเพิ่ม SurfaceGui จากนั้นภายใต้ Surface Gui ให้เพิ่ม TextLabel

  2. เลือก Surface GUI ในคุณสมบัติให้ทำการเปลี่ยนแปลงดังนี้:

    • เปลี่ยน Face เพื่อให้คุณสามารถเห็นข้อความบนหน้าของตัวจับเวลาในที่ที่ผู้เล่นมองอยู่
  3. เลือก TextLabel ในคุณสมบัติให้ทำการเปลี่ยนแปลงดังนี้:

    • ตั้ง Size เป็น {1, 0},{1, 0}.
    • ตั้ง TextScaled เป็น true.
    • ตั้ง Text ให้ว่างเปล่า ข้อความจะถูกอัปเดตโดยใช้สคริปต์

ตั้งสคริปต์

เมื่อคุณตั้งค่า timer เสร็จแล้ว ให้สร้างสคริปต์เพื่อควบคุมสะพานและแสดงหมายเลขนับถอยหลังให้ผู้เล่น

  1. ในส่วน Bridge ให้เพิ่มสคริปต์ใหม่ชื่อ TimedBridge ในสคริปต์นั้นให้สร้างตัวแปรดังต่อไปนี้


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- ระยะเวลาในการที่สะพานจะคงอยู่
    local timerDuration = 5

โค้ดการโต้ตอบแบบสัมผัส

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

  1. สร้างฟังก์ชันใหม่ชื่อ startTimer() พร้อมคำสั่ง print ข้างใน คุณจะใช้คำสั่ง print เพื่อตรวจสอบโค้ดของคุณ


    local timerDuration = 5
    local function startTimer()
    print("Countdown started")
    end
  2. โค้ดฟังก์ชันชื่อ buttonPressed() เพื่อตรวจสอบว่ามนุษย์สัมผัสปุ่มหรือไม่ ฟังก์ชันนี้ควรรับพารามิเตอร์ partTouched จากนั้นให้มี if statement ว่าง ๆ ถ้าพบมนุษย์ในส่วนนี้


    local function startTimer()
    print("Countdown started")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. เพื่อเริ่มต้นตัวจับเวลา ใน if statement ให้เรียกฟังก์ชัน startTimer()


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. ภายใต้ตอนท้ายของ buttonPressed() เชื่อมโยงฟังก์ชัน buttonPressed() กับเหตุการณ์ Touched ของปุ่ม


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. รันโครงการ แตะส่วนและตรวจสอบในหน้าต่างออกเพื่อดูข้อความพิมพ์

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

ในจุดนี้ หากสะพานทำงานไม่เป็นไปตามที่ตั้งใจไว้ ให้ลองใช้หนึ่งในวิธีด้านล่าง

ปัญหา: ข้อความแสดงข้อผิดพลาดบอกว่า: "... is not a valid member of workspace".

  • ในสคริปต์ TimedBridge ให้ตรวจสอบว่าชื่อส่วนประกอบทั้งหมดสะกดถูกต้องตามที่เห็นใน Explorer

ปัญหา: ไม่สามารถมองเห็นส่วนประกอบได้

  • ให้แน่ใจว่าส่วนประกอบทั้งสามถูกตั้งค่าเป็น Anchored
  • ตรวจสอบคุณสมบัติ Transparency สำหรับสะพาน

สร้างตัวจับเวลา

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

ทำให้สะพานเดินได้

เพื่อเริ่มต้น สคริปต์จะต้องทำให้สะพานมีความมั่นคง หรือสามารถชนได้ จากนั้นเริ่มตัวจับเวลาจนกว่าจะไม่สามารถเดินได้อีก

  1. เพื่อทำให้สะพานเดินได้ใน startTimer() ให้เปลี่ยนคุณสมบัติ Transparency ของสะพานเป็น 0 (ทึบ) และคุณสมบัติ CanCollide เป็น true


    local function startTimer()
    -- ทำให้สะพานมองเห็นและเดินได้
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. เพื่อสร้างตัวจับเวลาที่นับถอยหลัง ให้สร้างลูป for ด้วยค่าต่อไปนี้

    • Control Variable: ตั้งชื่อว่า count ตั้งค่าเป็น timerDuration
    • End: 0
    • Increment: -1

    local function startTimer()
    -- ทำให้สะพานมองเห็นและเดินได้
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. เพื่อแสดงตัวจับเวลาให้กับผู้เล่น เปลี่ยนข้อความใน timerText เป็นการแสดง count โดยการพิมพ์ timerText.Text = count ทุกครั้งที่ลูป for ผ่านการทำงานจะแสดงหมายเลขถัดไปในตัวจับเวลาให้กับผู้เล่น


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. ใช้ฟังก์ชัน task.wait เพื่อทำให้ลูป for ทำงานเพียงครั้งเดียวในหนึ่งวินาที


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. รันประสบการณ์ เมื่อคุณแตะปุ่ม สะพานควรปรากฏและตัวจับเวลาจะเริ่มต้น จากนั้นจะเสร็จสิ้น

ห้ามให้สะพานเริ่มใหม่

อย่างไรก็ตาม หากคุณเคลื่อนที่ไปรอบ ๆ บนปุ่ม ตัวจับเวลาจะรีสตาร์ทอยู่ตลอดเวลา

เหตุผลคือว่าลูป for ถูกเรียกทุกครั้งที่คุณแตะปุ่มและเริ่มลูป for จากจุดเริ่มต้น เพื่อหยุดไม่ให้ตัวจับเวลาคอยเริ่มใหม่ตลอดเวลา คุณจะต้องเพิ่ม boolean ซึ่งเป็นตัวแปรชนิดหนึ่งที่จะควบคุมว่าฟังก์ชัน startTimer() จะถูกเรียกใช้อีกครั้งหรือไม่

Boolean จะเขียนเหมือนกับตัวแปรอื่น ๆ แต่แทนที่จะใช้ตัวเลขหรือสตริง พวกมันจะตั้งค่าเป็น true หรือ false เท่านั้น ในกรณีนี้ สคริปต์จะใช้ boolean เพื่อตรวจสอบว่าตัวจับเวลากำลังทำงานอยู่หรือไม่ก่อนที่จะเริ่มมัน

  1. ที่ด้านบนของสคริปต์ของคุณ ใต้ตัวแปรของคุณ สร้างตัวแปรชื่อ timerActive และตั้งค่าเป็น false เนื่องจากยังไม่มีใครกดปุ่ม


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. เพื่อให้แน่ใจว่าตัวจับเวลาเริ่มต้นเมื่อ boolean timerActive เป็น false เพิ่มเงื่อนไขที่สองใน if statement ใน buttonPressed()


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. เพื่อให้ startTimer() ไม่ทำงานอีกครั้งก่อนที่ตัวจับเวลาจะหมด ให้ตั้งค่า boolean timerActive เป็น true


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. ในฟังก์ชัน startTimer() หลังจากลูป for ให้ตั้งค่าคุณสมบัติสะพานกลับเป็นต้นฉบับด้วยการเปลี่ยนความโปร่งใสของสะพานเป็น 0.8 และ CanCollide เป็น false


    local function startTimer()
    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
    end
  5. อีกสิ่งหนึ่งในการรีเซ็ตสะพานคือการเปลี่ยน timerText เป็นสตริงว่างเหมือนเมื่อก่อน จากนั้นตั้งค่า boolean timerActive เป็น false


    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. ทดสอบการเล่นและตรวจสอบให้แน่ใจว่าสะพานสามารถใช้ได้หลายครั้ง

สคริปต์สะพานที่มีเวลาที่เสร็จสมบูรณ์


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 ที่ทำงานเป็นการนับถอยหลัง ในระหว่างการนับถอยหลัง ผู้เล่นจะมีเวลาจำกัดในการข้ามสะพาน

©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ