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

แทรก Script ลงในส่วนนี้ เปลี่ยนชื่อเป็น FadeOnTouch และลบโค้ดเริ่มต้นออก

สร้างตัวแปรสำหรับแพลตฟอร์มและฟังก์ชันว่างที่เชื่อมต่อกับเหตุการณ์ Touched ของแพลตฟอร์ม
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
ทำให้แพลตฟอร์มจางหาย
การทำให้แพลตฟอร์มหายไปในทันทีจะไม่สนุกเลยเพราะผู้ใช้จะพบว่ามันเป็นไปไม่ได้ที่จะข้ามช่องว่าง แพลตฟอร์มควร จางหายไป ก่อนที่ผู้ใช้จะตกผ่านมันเพื่อให้พวกเขามีโอกาสกระโดดออกไป
คุณสามารถเปลี่ยนคุณสมบัติ Transparency และรอเวลาสั้น ๆ ซ้ำ ๆ เพื่อให้ได้ผลนี้ แต่การจางหายอย่างค่อยเป็นค่อยไปจะต้องมีการเปลี่ยนแปลงอย่างน้อย 10 ครั้งระหว่าง 0 และ 1 นั่นคือ 20 บรรทัดของโค้ดที่ซ้ำซาก
สิ่งนี้สามารถทำได้อย่างมีประสิทธิภาพมากขึ้นโดยใช้ for ลูปซึ่งทำซ้ำโค้ดจำนวนครั้งที่กำหนด ทุก ๆ ลูปของโค้ดจะเรียกว่า iteration ลูป for จะถูกกำหนดด้วยสามสิ่งที่แยกจากกันด้วยเครื่องหมายจุลภาค:

- ตัวแปรควบคุม - ตัวแปรที่สร้างขึ้นและใช้ในการนับลูป ในตัวอย่างนี้คือ count และค่าตั้งต้นคือ 1
- ค่าจบ - ค่าที่ต้องไปถึงเพื่อให้ลูปหยุด ในตัวอย่างนี้คือ 10
- การเพิ่มขั้นตอนOPTIONAL- กำหนดสิ่งที่จะเพิ่มให้กับตัวแปรควบคุมในแต่ละลูป หากไม่ระบุ จะใช้ค่าเริ่มต้นเป็น 1 ดังนั้นในตัวอย่างนี้จึงไม่จำเป็น
ใน FadeOnTouch:
ในฟังก์ชัน สร้างลูป for เริ่มจาก 1 ซึ่งทำซ้ำ 10 ครั้ง
ภายในลูป for ตั้งค่าคุณสมบัติ Transparency ให้เท่ากับตัวแปรควบคุมหารด้วย 10
เรียกใช้ฟังก์ชัน task.wait() โดยมีเวลาที่ 0.1
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
เมื่อรันลูป ตัวนับจะเพิ่มขึ้น 1 ในแต่ละ iteration ซึ่งหมายความว่าคุณสมบัติ Transparency ของแพลตฟอร์มจะเพิ่มขึ้น 0.1 ทุก ๆ 0.1 วินาที จนถึงความโปร่งใสเต็มที่หลังจาก 1 วินาที
ปรากฏอีกครั้ง
หลังจากที่แพลตฟอร์มหายไป ผู้ใช้ควรตกผ่านมัน แพลตฟอร์มควรกลับมาอีกครั้งหลังจากที่มันจางหายไปไม่กี่วินาที มิฉะนั้น ผู้ใช้จะไม่มีโอกาสลองกระโดดอีกครั้งหากพวกเขาล้มเหลว คุณสมบัติ CanCollide ควบคุมว่าผู้ใช้สามารถตกผ่านส่วนได้หรือไม่
ตั้งค่าคุณสมบัติ CanCollide ของแพลตฟอร์มเป็น false หลังจากลูป for
รอไม่กี่วินาทีโดยใช้ฟังก์ชัน task.wait()
ตั้งค่าคุณสมบัติ CanCollide กลับเป็น true
ตั้งค่าคุณสมบัติ Transparency กลับเป็น 0
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endplatform.CanCollide = falsetask.wait(3)platform.CanCollide = trueplatform.Transparency = 0endplatform.Touched:Connect(fade)
ตัวแปร Debounce
ใน ลาวาที่อันตราย คุณได้เรียนรู้ว่าเหตุการณ์ Touched จะทำงานทุกครั้งที่ส่วนของร่างกายของผู้ใช้สัมผัสกับส่วนนี้ พฤติกรรมนี้ทำให้เกิดปัญหาเมื่อผู้ใช้วิ่งข้ามแพลตฟอร์มที่จางหาย: ฟังก์ชันจะทำงานหลายครั้ง ทำให้ลูปรีเซ็ตทุกครั้ง
เพื่อให้โค้ดทำงานได้อย่างถูกต้อง ฟังก์ชันควรทำงานเพียงครั้งเดียวเมื่อผู้ใช้สัมผัสแพลตฟอร์มเป็นครั้งแรก การทำให้แน่ใจว่าการกระทำจะถูกเรียกใช้เพียงครั้งเดียวเมื่อมันจะถูกเรียกใช้หลายครั้งเรียกว่า debouncing
ในการ debounce ฟังก์ชัน สามารถใช้ตัวแปร boolean เพื่อติดตามว่าแพลตฟอร์มถูกสัมผัสแล้วหรือไม่ Boolean สามารถมีค่าได้เพียง true และ false สร้างตัวแปรชื่อ isTouched และตั้งค่าเป็น false
local platform = script.Parent
local isTouched = false
local function fade()
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
platform.Touched:Connect(fade)ตรวจสอบตัวแปร
สามารถใช้คำสั่ง if เพื่อให้โค้ดในฟังก์ชัน fade ทำงานเฉพาะเมื่อค่าตัวแปร debounce isTouched เป็น false ห่อหุ้มเนื้อหาของฟังก์ชัน fade ในคำสั่ง if ที่มีเงื่อนไขว่า not isTouched
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
end
platform.Touched:Connect(fade)ตัวดำเนินการ not ของ Luau จะกลับค่าของสิ่งที่ตามมา ในแง่ของเงื่อนไข หมายความว่าคำสั่ง if แรกทำงานเหมือนกับคำสั่งที่ตามมา
if not isTouched then
end
if isTouched == false then
end
if isTouched == nil then
endสลับการ debounce
ในขณะนี้ โค้ดในฟังก์ชัน fade จะทำงานเสมอเพราะ isTouched เป็น false และ not isTouched จะประเมินเป็น true เพื่อให้เสร็จสิ้นการ debounce คุณจะต้องสลับค่าของตัวแปรในสองสถานที่
- ตั้งค่า isTouched เป็น true ภายในคำสั่ง if ก่อนที่แพลตฟอร์มจะเริ่มจางหาย
- ตั้งค่ากลับเป็น false เมื่อแพลตฟอร์มกลับมาอีกครั้ง
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)และนั่นคือทั้งหมด! ทดสอบโค้ดของคุณตอนนี้ และคุณควรพบว่าแพลตฟอร์มจางหายไปเมื่อผู้ใช้กระโดดขึ้นไปและกลับมาอีกไม่กี่วินาทีต่อมา
คุณสามารถทำสำเนาแพลตฟอร์มนี้ในช่องว่างที่กว้างขึ้นเพื่อสร้างอุปสรรคที่ท้าทายและเปลี่ยนความเร็วที่มันจางหายเพื่อปรับสมดุลความยาก
โค้ดสุดท้าย
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)