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

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

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

- ตัวควบคุม (Control variable) - ตัวแปรที่สร้างและใช้เพื่อเรียกนับลูป ในตัวอย่างนี้คือ count และค่าเริ่มต้นคือ 1
- ค่าจบ (End value) - ค่าที่จำเป็นต้องถึงเพื่อให้ลูปหยุด ในตัวอย่างนี้คือ 10
- การเพิ่มขึ้น (Step increment) (ไม่บังคับ) - กำหนดว่าจะเพิ่มอะไรให้กับตัวควบคุมในแต่ละลูป หากละทิ้ง มันจะค่าเริ่มต้นที่ 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)
เมื่อรันลูป จำนวน count จะเพิ่มขึ้น 1 ในแต่ละการวน นั่นหมายความว่าคุณสมบัติ 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 variable)
ใน ลาวาที่ทำให้ตาย คุณได้เรียนรู้ว่าเหตุการณ์ Touched ทำงานทุกครั้งที่อวัยวะของผู้ใช้สัมผัสกับส่วนหนึ่ง พฤติกรรมนี้ทำให้เกิดปัญหาเมื่อผู้ใช้วิ่งผ่านแพลตฟอร์มที่ค่อย ๆ จางหายไป: ฟังก์ชันจะทำงานหลายครั้งรีเซ็ตลูปในทุกครั้ง
เพื่อให้โค้ดทำงานอย่างถูกต้อง ฟังก์ชันควรทำงานเพียงครั้งเดียวเมื่อผู้ใช้สัมผัสแพลตฟอร์มเป็นครั้งแรก การมั่นใจว่าการกระทำจะถูกกระตุ้นเพียงครั้งเดียวเมื่อมันจะถูกกระตุ้นหลายครั้งเรียกว่า debouncing
ในการให้ผลลัพธ์ในฟังก์ชัน สามารถใช้ตัวแปร 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 ทำงานเฉพาะเมื่อค่าตัวแปร 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 thenendif isTouched == false thenendif isTouched == nil thenend
สลับค่าการให้ผลลัพธ์
ขณะนี้โค้ดในฟังก์ชัน fade จะทำงานตลอดเวลาเนื่องจาก isTouched เป็น false และ not isTouched ประเมินเป็น true เพื่อทำให้การให้ผลลัพธ์เสร็จสมบูรณ์ คุณจำเป็นต้องสลับค่าของตัวแปรในสองตำแหน่ง
- ตั้งค่า 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)