คู่มือการใช้งานระดับกลาง

กับดักที่ค่อย ๆ จางหายไป

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

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

ตั้งค่า

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

  1. แทรกส่วนหนึ่งและย้ายไปยังตำแหน่งในโลกของคุณ ตั้งชื่อว่า FadingPlatform

  2. ปรับขนาดมันให้อยู่ในระดับที่ผู้ใช้สามารถกระโดดขึ้นไปได้

  3. ตรวจสอบให้แน่ใจว่ามันถูก ยึดติด (Anchored)

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

  5. สร้างตัวแปรสำหรับแพลตฟอร์มและฟังก์ชันว่างที่เชื่อมต่อกับเหตุการณ์ Touched ของแพลตฟอร์ม


    local platform = script.Parent
    local function fade()
    end
    platform.Touched:Connect(fade)

ทำให้แพลตฟอร์มจางลง

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

คุณสามารถเปลี่ยนคุณสมบัติ Transparency และรอเป็นเวลาสั้น ๆ ซ้ำแล้วซ้ำอีกเพื่อให้ได้ผลนี้ แต่การค่อย ๆ จางลงจะต้องมีการเปลี่ยนแปลงอย่างน้อย 10 ครั้งระหว่าง 0 ถึง 1 นั่นคือโค้ดที่ซ้ำซาก 20 บรรทัด

สามารถทำได้อย่างมีประสิทธิภาพมากขึ้นโดยใช้ for ลูปซึ่งทำซ้ำโค้ดตามจำนวนที่กำหนด จำนวนการทำซ้ำในโค้ดนี้เรียกว่า iteration ลูป for ถูกกำหนดโดยสามสิ่งที่แยกด้วยเครื่องหมายจุลภาค:

  • ตัวควบคุม (Control variable) - ตัวแปรที่สร้างและใช้เพื่อเรียกนับลูป ในตัวอย่างนี้คือ count และค่าเริ่มต้นคือ 1
  • ค่าจบ (End value) - ค่าที่จำเป็นต้องถึงเพื่อให้ลูปหยุด ในตัวอย่างนี้คือ 10
  • การเพิ่มขึ้น (Step increment) (ไม่บังคับ) - กำหนดว่าจะเพิ่มอะไรให้กับตัวควบคุมในแต่ละลูป หากละทิ้ง มันจะค่าเริ่มต้นที่ 1 ดังนั้นในตัวอย่างนี้จึงไม่จำเป็น

ใน FadeOnTouch:

  1. ในฟังก์ชัน สร้างลูป for เริ่มต้นจาก 1 ที่วนซ้ำ 10 ครั้ง

  2. ภายในลูป for ตั้งค่าคุณสมบัติ Transparency เป็นตัวควบคุมหารด้วย 10

  3. เรียกฟังก์ชัน task.wait() โดยให้เวลาที่ 0.1


    local platform = script.Parent
    local function fade()
    for count = 1, 10 do
    platform.Transparency = count / 10
    task.wait(0.1)
    end
    end
    platform.Touched:Connect(fade)

เมื่อรันลูป จำนวน count จะเพิ่มขึ้น 1 ในแต่ละการวน นั่นหมายความว่าคุณสมบัติ Transparency ของแพลตฟอร์มจะเพิ่มขึ้น 0.1 ทุก ๆ 0.1 วินาที จนถึงความโปร่งใสทั้งหมดหลังจาก 1 วินาที

ปรากฏอีกครั้ง

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

  1. ตั้งค่าคุณสมบัติ CanCollide ของแพลตฟอร์มเป็น false หลังลูป for

  2. รอไม่กี่วินาทีด้วยฟังก์ชัน task.wait()

  3. ตั้งค่าคุณสมบัติ CanCollide กลับเป็น true

  4. ตั้งค่าคุณสมบัติ Transparency กลับเป็น 0


    local platform = script.Parent
    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)

ตัวแปรให้ผลลัพธ์ (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 then
end
if isTouched == false then
end
if isTouched == nil then
end

สลับค่าการให้ผลลัพธ์

ขณะนี้โค้ดในฟังก์ชัน fade จะทำงานตลอดเวลาเนื่องจาก isTouched เป็น false และ not isTouched ประเมินเป็น true เพื่อทำให้การให้ผลลัพธ์เสร็จสมบูรณ์ คุณจำเป็นต้องสลับค่าของตัวแปรในสองตำแหน่ง

  1. ตั้งค่า isTouched เป็น true ภายในคำสั่ง if ก่อนที่แพลตฟอร์มจะเริ่มจางหายไป
  2. ตั้งค่ามันกลับเป็น 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)
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ