การฝึกซ้อมลูป - สร้างสะพานที่มีเวลาจำกัด

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

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

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

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

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

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

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

    • Transparency = 0.8
    • CanCollide = False

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

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

  1. เลือก TimerDisplay และเพิ่ม SurfaceGui จากนั้น ให้เพิ่ม TextLabel ที่เป็นลูกของ Surface Gui

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

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

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

ตั้งค่าสคริปต์

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

  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. รันโครงการ สัมผัสส่วนประกอบและตรวจสอบในหน้าต่าง Output เพื่อดูคำสั่ง print

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

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

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

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

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

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

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

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

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

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

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

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

    • ตัวควบคุม: ตั้งชื่อว่า count ตั้งค่าเป็น timerDuration
    • สิ้นสุด: 0
    • เพิ่ม: -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 จากจุดเริ่มต้น เพื่อป้องกันไม่ให้ตัวจับเวลาเริ่มใหม่ตลอดเวลา คุณจะต้องเพิ่มบูลีน ซึ่งเป็นประเภทของตัวแปรที่จะควบคุมว่าฟังก์ชัน startTimer() สามารถถูกเรียกอีกครั้งหรือไม่

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

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

    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. เพื่อให้แน่ใจว่าตัวจับเวลาเริ่มต้นเมื่อบูลีน 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() ทำงานอีกครั้งก่อนที่ตัวจับเวลาจะหมด ให้ตั้งค่าบูลีน 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 เป็นสตริงว่างเหมือนที่เคยเป็นมา จากนั้นตั้งค่าบูลีน 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 เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ