โครงการนี้เป็นอีกตัวอย่างหนึ่งของการใช้ลูปในทางปฏิบัติสำหรับสะพานนี้ผู้เล่นจะสัมผัสปุ่มเพื่อทำให้สะพานเดินได้ในเวลาจํากัดก่อนที่มันจะหายไปเพื่อสร้างตัวจับเวลาและแสดงเวลาที่เหลือให้กับผู้เล่น คุณจะใช้ลูป
ตั้งค่าโครงการ
สะพานนี้สามารถรวมอยู่ในโครงการเกมใดก็ได้ที่มีความท้าทายที่ขึ้นอยู่กับการเคลื่อนไหว เช่น obby
สร้างชิ้นส่วน
ค้นหาสถานที่ที่จะสร้างสะพาน, เช่นแม่น้ำหรือช่องว่างขนาดใหญ่ใน obby สร้างสามส่วน ถูกยึด เช่นด้านล่าง
- การแสดงเวลา
- สะพาน
- สะพานปุ่ม
ไม่ได้ใช้งานอยู่สะพานจะเป็นใสเล็กน้อย เพื่อทำเช่นนั้นให้เลือก สะพาน และเปลี่ยนคุณสมบัติ
- ความโปร่งใส = 0.8
- CanCollide = ไม่ถูก
สร้างการแสดงนาฬิกาจับเวลา
เมื่อข้ามสะพานผู้เล่นจะต้องดูว่าเหลืออีกกี่วินาทีก่อนที่สะพานจะหายไปวิธีหนึ่งในการแสดงรูปภาพหรือข้อความคือการเพิ่มวัตถุที่เรียกว่า GUI พื้นผิวให้กับส่วน อินเทอร์เฟซ GUI สามารถใช้สร้างป้ายในเกม, แถบสุขภาพที่กำหนดเอง, และระบบสินค้าคงคลังได้บทแนะนำนี้จะผ่านสิ่งนี้อย่างรวดเร็ว แต่สามารถหาข้อมูลเพิ่มเติมได้ในส่วน การฝึกอบรม
เลือกการแสดงเวลาและเพิ่ม SurfaceGui จากนั้นพ่วงไปยัง Surface Gui แล้วเพิ่ม TextLabel
เลือกพื้น GUI ในคุณสมบัติทำการเปลี่ยนแปลงต่อไปนี้:
- เปลี่ยน ใบหน้า เพื่อให้คุณสามารถดูฉลากข้อความบนด้านหน้าของตัวจับเวลาที่ผู้เล่นกำลังมอง
เลือกฉลากข้อความ ในคุณสมบัติทำการเปลี่ยนแปลงต่อไปนี้:
- ตั้ง ขนาด เป็น {1, 0},{1, 0} .
- ตั้ง TextScaled เป็นจริง
- ตั้ง ข้อความ ให้ว่างเปล่า ข้อความจะได้รับการอัปเดตโดยใช้สคริปต์
ตั้งค่าสคริปต์
ตอนนี้ที่ตัวจับเวลาอยู่ในตำแหน่งแล้ว สร้างสคริปต์เพื่อควบคุมสะพานและแสดงหมายเลขนับถอยหลังให้กับผู้เล่น
ในส่วนสะพานเพิ่มสคริปต์ใหม่ชื่อ TimedBridge ในสคริปต์นั้นสร้างตัวแปรต่อไปนี้
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- นานแค่ไหนที่สะพานจะยังคงมั่นคงlocal timerDuration = 5
เขียนการโต้ตอบแบบสัมผัส
เพื่อใช้สะพานคุณจะต้องสร้างสองฟังก์ชันฟังก์ชันหนึ่งจะทำให้สะพานเดินได้และแสดงตัวจับเวลาฟังก์ชันอื่นจะฟังถ้าผู้เล่นแตะปุ่มที่เปิดใช้งานสะพาน
สร้างฟังก์ชันใหม่ชื่อ startTimer() ด้วยคำสั่งพิมพ์ภายใน รหัส
local timerDuration = 5local function startTimer()print("Countdown started")endเขียนฟังก์ชันชื่อ buttonPressed() เพื่อตรวจสอบว่ามนุษย์หุ่นยนต์แตะปุ่มหรือไม่ฟังก์ชันควรยอมรับพารามิเตอร์ของ partTouched และจากนั้นจะมีคำสั่งว่างเปล่าหากมนุษย์หุ่นยนต์ถูกตรวจพบในส่วนนั้น
local function startTimer()print("Countdown started")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendเพื่อเริ่มต้นตัวจับเวลาในคําสั่ง if ให้โทรไปที่ฟังก์ชัน 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 ปัญหา : ไม่สามารถเห็นชิ้นส่วนได้
ตรวจสอบให้แน่ใจว่าทั้งสามส่วนถูกยึดแน่น
ตรวจสอบคุณสมบัติความโปร่งใสสำหรับสะพาน
สร้างตัวจับเวลา
เมื่อผู้เล่นเหยียบสะพาน startTimer() จะทำให้สะพานเดินได้และเริ่มต้นนับเวลาเมื่อนับถอยหลังถึง 0 หล่นทำให้ผู้ที่ไม่เร็วพอจะล้มลง
ทำให้สะพานเดินได้
เพื่อเริ่มต้นสคริปต์จะต้องทำให้สะพานแข็งหรือชนกันได้แล้วเริ่มตัวจับเวลาจนกว่าจะกลายเป็นไม่สามารถเดินได้
เพื่อให้สะพานเดินได้ใน startTimer() เปลี่ยนคุณสมบัติความโปร่งใสของสะพานเป็น 0 (ทึบ) และคุณสมบัติ CanCollide เป็นจริง
local function startTimer()-- ทำให้สะพานมองเห็นได้และเดินได้bridge.Transparency = 0bridge.CanCollide = trueendเพื่อสร้างตัวนับเวลาที่นับลง สร้างลูป for ด้วยค่าต่อไปนี้
- ตัวแปรควบคุม : ชื่อ count กำหนดเป็น timerDuration .
- จบ : 0
- การเพิ่ม : -1
local function startTimer()-- ทำให้สะพานมองเห็นได้และเดินได้bridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendเพื่อแสดงตัวจับเวลาให้กับผู้เล่น เปลี่ยนข้อความใน timerText เพื่อแสดงจํานวนการแสดงโดยพิมพ์ timerText.Text = countทุกครั้งที่ลูป for ผ่านการเลื่อนรอบจะแสดงหมายเลขถัดไปในเวลาของผู้เล่น
for count = timerDuration, 0, -1 dotimerText.Text = countendใช้ฟังก์ชัน wait เพื่อทำให้ลูป for ทำงานเพียงครั้งเดียวต่อวินาที
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endเรียกใช้เกม เมื่อคุณแตะปุ่ม สะพานควรปรากฏและนับถอยหลังจะเริ่ม จากนั้นเสร็จสิ้น
รักษาสะพานไม่ให้รีสตาร์ท
แม้ว่าคุณจะย้ายไปรอบ ๆ ปุ่มก็ตาม เวลาจะยังคงรีสตาร์ทอยู่
เนื่องจากลูป for ถูกเรียกในแต่ละครั้งที่คุณสัมผัสปุ่มและเริ่มลูป for ตั้งแต่ต้นเพื่อป้องกันไม่ให้ตัวจับเวลารีสตาร์ทอย่างต่อเนื่อง คุณจะต้องเพิ่มบูลีน ประเภทของตัวแปร ที่จะควบคุมว่า startTimer() จะสามารถโทรได้อีกครั้งหรือไม่ บูลเลียน จะถูกเขียนในลักษณะเดียวกับตัวแปรอื่น ๆ แต่แทนที่จะใช้ตัวเลขหรือสตริงพวกเขาสามารถตั้งค่าเป็นจริงหรือเท็จเท่านั้นในสถานการณ์นี้สคริปต์จะใช้เลขเบี้ยวเพื่อตรวจสอบว่าเทมเพอร์กําลังทํางานอยู่หรือไม่ก่อนที่จะเริ่มต้น
ที่ด้านบนของสคริปต์ของคุณภายใต้ตัวแปรของคุณสร้างตัวแปรชื่อ timerActive และตั้งค่าให้เป็น false เนื่องจากยังไม่มีใครกดปุ่มยัง
local timerDuration = 5local timerActive = falselocal function startTimer()เพื่อให้แน่ใจว่าตัวจับเวลาจะเริ่มต้นเฉพาะเมื่อ timerActive บูลีนเป็น false ให้เพิ่มเงื่อนไขที่สองใน if ใน buttonPressed()
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendเพื่อให้ startTimer() ไม่ทำงานอีกครั้งก่อนที่เวลาจะหมดลง ให้ตั้งค่า boolean timerActive เป็นจริง
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 count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- ทำให้สะพานไม่สามารถเดินได้bridge.Transparency = 0.8bridge.CanCollide = falseendสิ่งสุดท้ายที่จะรีเซ็ตสะพานคือการเปลี่ยน timerText เป็นสตริงว่างเปล่าเช่นเดียวกับที่มันเป็นเดิมจากนั้นตั้งค่า 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 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 ที่ทำหน้าที่เป็นนับถอยหลังในระหว่างการนับถอยหลังผู้เล่นจะได้รับเวลาจำกัดในการข้าม