การฝึกซ้อมลูป - สร้างสะพานเวลา

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

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

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

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

สร้างชิ้นส่วน

  1. ค้นหาสถานที่ที่จะสร้างสะพาน, เช่นแม่น้ำหรือช่องว่างขนาดใหญ่ใน obby สร้างสามส่วน ถูกยึด เช่นด้านล่าง

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

    • ความโปร่งใส = 0.8
    • CanCollide = ไม่ถูก

สร้างการแสดงนาฬิกาจับเวลา

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

  1. เลือกการแสดงเวลาและเพิ่ม SurfaceGui จากนั้นพ่วงไปยัง Surface Gui แล้วเพิ่ม TextLabel

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

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

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

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

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

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


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- นานแค่ไหนที่สะพานจะยังคงมั่นคง
    local timerDuration = 5

เขียนการโต้ตอบแบบสัมผัส

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

  1. สร้างฟังก์ชันใหม่ชื่อ startTimer() ด้วยคำสั่งพิมพ์ภายใน รหัส


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


    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 ให้โทรไปที่ฟังก์ชัน 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 ปัญหา : ไม่สามารถเห็นชิ้นส่วนได้

  • ตรวจสอบให้แน่ใจว่าทั้งสามส่วนถูกยึดแน่น

  • ตรวจสอบคุณสมบัติความโปร่งใสสำหรับสะพาน

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

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

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

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

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


    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 เพื่อแสดงจํานวนการแสดงโดยพิมพ์ timerText.Text = countทุกครั้งที่ลูป for ผ่านการเลื่อนรอบจะแสดงหมายเลขถัดไปในเวลาของผู้เล่น


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


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

รักษาสะพานไม่ให้รีสตาร์ท

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

เนื่องจากลูป for ถูกเรียกในแต่ละครั้งที่คุณสัมผัสปุ่มและเริ่มลูป for ตั้งแต่ต้นเพื่อป้องกันไม่ให้ตัวจับเวลารีสตาร์ทอย่างต่อเนื่อง คุณจะต้องเพิ่มบูลีน ประเภทของตัวแปร ที่จะควบคุมว่า startTimer() จะสามารถโทรได้อีกครั้งหรือไม่ บูลเลียน จะถูกเขียนในลักษณะเดียวกับตัวแปรอื่น ๆ แต่แทนที่จะใช้ตัวเลขหรือสตริงพวกเขาสามารถตั้งค่าเป็นจริงหรือเท็จเท่านั้นในสถานการณ์นี้สคริปต์จะใช้เลขเบี้ยวเพื่อตรวจสอบว่าเทมเพอร์กําลังทํางานอยู่หรือไม่ก่อนที่จะเริ่มต้น

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


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


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