ใน ลาวาร้ายแรง คุณเรียนรู้วิธีการเรียกใช้โค้ดตามพฤติกรรมของผู้ใช้บทแนะนำนี้แสดงวิธีการสร้างแพลตฟอร์มที่จะจางไปเมื่อผู้ใช้เดินบนมัน
ตั้งค่า
หากคุณปฏิบัติตาม ลาวาร้ายแรง คุณสามารถวางแพลตฟอร์มล่องหนของคุณเหนือพื้นลาวาที่ผู้ใช้ไม่สามารถกระโดดข้ามได้
ใส่ส่วนและย้ายไปยังสถานที่ในโลกของคุณ ตั้งชื่อมัน FadingPlatform
ขยายขนาดเพื่อให้ผู้ใช้สามารถกระโดดบนมันได้
ตรวจสอบให้แน่ใจว่ามัน ถูกยึด .
ใส่ สคริปต์ ในส่วน เปลี่ยนชื่อเป็น FadeOnTouch รหัส
สร้างตัวแปรสำหรับแพลตฟอร์มและฟังก์ชันว่างที่เชื่อมโยงกับอีเวนต์ของแพลตฟอร์ม Touched
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
จางแพลตฟอร์ม
การที่แพลตฟอร์มจะหายไปในทันทีจะไม่สนุกเลยเพราะผู้ใช้จะพบว่าเป็นไปไม่ได้ที่จะข้ามช่องว่างแทนที่จะเป็นเช่นนั้น แพลตฟอร์มควร จางไป ปิด
คุณสามารถเปลี่ยนคุณสมบัติ Transparency และรอเวลาสั้น ๆ หลายรอบเพื่อให้ได้ผลลัพธ์นี้ แต่การเลือนระดับที่ค่อยเป็นค่อยไปจะต้องมีการเปลี่ยนแปลงอย่างน้อย 10 ครั้งระหว่าง 0 และ 1นั่นคือ 20 รหัส
สามารถทำได้อย่างมีประสิทธิภาพมากขึ้นโดยใช้ลูป สําหรับ ซึ่งทำซ้ำโค้ดจํานวนครั้งที่กำหนดได้แต่ละรอบของโค้ดเรียกว่าเป็นการ ซ้ำ ลูป A กำหนดด้วยสามสิ่งที่แยกกับจุลภาค:
- ตัวแปรควบคุม - ตัวแปรที่สร้างและใช้เพื่อนับลูป ในตัวอย่างนี้มันคือ count และมูลค่าเริ่มต้นคือ 1
- ค่าสิ้นสุด - ค่าที่ต้องได้รับเพื่อให้ลูปหยุด ในตัวอย่างนี้คือ 10
- การเพิ่มขั้นตอน (ตัวเลือก) - กำหนดสิ่งที่จะเพิ่มในตัวแปรควบคุมในแต่ละรอบหากถูกละเว้นจะเริ่มต้นที่ 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 ในแต่ละรอบซึ่งหมายความว่าแพลตฟอร์มของ 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 จะเกิดขึ้นทุกครั้งที่ส่วนของร่างกายของผู้ใช้มาสัมผัสกับส่วนหนึ่งพฤติกรรมนี้ทำให้เกิดปัญหาเมื่อผู้ใช้วิ่งข้ามแพลตฟอร์มที่จางไป: ฟังก์ชันจะทำงานหลายครั้งโดยรีเซ็ตลูปในแต่ละครั้ง
เพื่อให้โค้ดทำงานได้อย่างถูกต้อง ฟังก์ชันควรจะทำงานเพียงครั้งเดียวเมื่อผู้ใช้สัมผัสกับแพลตฟอร์มเป็นครั้งแรกการรับประกันว่าการดำเนินการจะถูกกระตุ้นเพียงครั้งเดียวเมื่อมันจะถูกกระตุ้นหลายครั้งนั้นเรียกว่า การยกเลิก เพื่อยกเลิกฟังก์ชัน แปร 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 สามารถใช้เพื่อเรียกร้องโค้ดเฉพาะในฟังก์ชันการจางได้เท่านั้นหากตัวแปรการยกเลิก isTouched เป็นเท็จห่อร่างกายของฟังก์ชันการจางไปในคําสั่ง 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)
ตัวประกอบ Luau not ย้อนกลับมูลค่าของสิ่งที่ตามมาในเงื่อนไขนี่หมายความว่าคำสั่ง if ติดตาม
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
สลับการยับยั้ง
ในขณะนี้โค้ดในฟังก์ชัน fade จะทำงานเสมอเพราะ isTouched เป็นเท็จและ not isTouched จะประเมินเป็นจริงเพื่อเสร็จสิ้นระบบ 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)