รูปแบบ debounce เป็นเทคนิคการเขียนโค้ดที่ป้องกันให้ฟังไม่ว่างเวลามากเกินไปหรือการป้อนข้อมูลหลายรอบ ตัวอย่างการเขียนโค้ดต่อไปนี้แสดงให้เห็น debounce เป็นเทคนิคที่ดีที่สุด
ตรวจจับการชน
เมื่อคุณต้องการสร้างส่วนหนึ่งของกับดักอันตรายที่สร้างความเสียหาย 10 เมื่อแตะ การใช้การติดตั้งอินทรีเริ่มต้นอาจใช้การเชื่อมต่อพื้นฐาน BasePart.Touched และการใช้งาน
สคริป - ทำลายผู้เล่น
local part = script.Parent
local function damagePlayer(otherPart)
print(part.Name .. " collided with " .. otherPart.Name)
local humanoid = otherPart.Parent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health -= 10 -- ลดสุขภาพผู้เล่น
end
end
part.Touched:Connect(damagePlayer)
ในขณะที่มีเหตุผลในตาตัวแรก การทดสอบจะแสดงให้เห็นว่ากิจกรรม Touched จะเกิดขึ้นหลายครั้งในความสำเร็จอย่างรวดเร็วตามความสัมพันธ์ทางกายภาพที่ละเอียดอ่อน
เพื่อหลีกเลี่ยงการสร้างความเสียหายเกินไปในการติดต่อครั้งแรก คุณสามารถเพิ่มระบบดีบั๊นซึ่งกำหนดระยะเวลาการรอผ่าน ค่าตัวละครในตัวละคร
สคริปต์ - ทำลายผู้เล่นโดยใช้ Debounce
local part = script.Parent
local RESET_TIME = 1
local function damagePlayer(otherPart)
print(part.Name .. " collided with " .. otherPart.Name)
local humanoid = otherPart.Parent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
if not part:GetAttribute("Touched") then
part:SetAttribute("Touched", true) -- ตั้งค่าค่าตัวละครเป็น true
humanoid.Health -= 10 -- ลดสุขภาพผู้เล่น
task.wait(RESET_TIME) -- รอระยะเวลาการรีเซ็ต
part:SetAttribute("Touched", false) -- รีเซ็ตค่าตัวละคร
end
end
end
part.Touched:Connect(damagePlayer)
การเรียกเสียง
การเดบาวน์ยังมีประโยชน์เมื่อทำงานกับเอฟเฟ็กต์เสียง เช่น การเล่นเสียงเมื่อสองชิ้นส่วนชนกัน ( Class.BasePart.
เพื่อป้องกันการซ้อมเสียงคุณสามารถดีบันส์โดยใช้คุณสมบัติ IsPlaying ของวัตถุ Sound คือ
สคริปต์ - เล่นเสียงชนกันโดยใช้ Debounce
local projectile = script.Parent
local function playSound()
-- ค้นหาเสียงเด็กในชิ้นส่วน
local sound = projectile:FindFirstChild("Impact")
-- เล่นเสียงเท่านั้นหากมันยังไม่เล่น
if sound and not sound.IsPlaying then
sound:Play()
end
end
projectile.Touched:Connect(playSound)
สคริป - การคลิกปุ่มเล่นโดยใช้ Debounce
local button = script.Parent
local function onButtonActivated()
-- ค้นหาเสียงเด็กในปุ่ม
local sound = button:FindFirstChild("Click")
-- เล่นเสียงเท่านั้นหากมันยังไม่เล่น
if sound and not sound.IsPlaying then
sound:Play()
end
end
button.Activated:Connect(onButtonActivated)
เอฟเฟกต์การเก็บขึ้น
ประสบการณ์มักจะรวมถึงการเก็บของสะสมในโลก 3D เช่นเครื่องมือแพทย์, กระสุน, และอื่น ๆ หากคุณออกแบบการเก็บเหล่านี้ให้อยู่ในโลกเพื่อให้ผู้เล่นสามารถจับได้อีกครั้งและ
คล้ายกับ ตรวจจับการชน คุณสามารถจัดการสถานะดีบั๊นซ์ด้วย ค่าตัวอย่างในตัว และวิзуualไลซ์ระยะเวลาการรอคอยด้วยการเปลี่ยน Class.BasePart.Transparency|Transparency ของผู้
สคริป - การเก็บสุขภาพโดยใช้ Debounce
local part = script.Parent
part.Anchored = true
part.CanCollide = false
local COOLDOWN_TIME = 5
local function healPlayer(otherPart)
local humanoid = otherPart.Parent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
if not part:GetAttribute("CoolingDown") then
part:SetAttribute("CoolingDown", true) -- ตั้งค่าค่าตัวละครเป็น true
humanoid.Health += 25 -- เพิ่มสุขภาพผู้เล่น
part.Transparency = 0.75 -- ทำให้ชิ้นส่วนเป็นเหลวในการแสดงสถานะคูลดาวน์
task.wait(COOLDOWN_TIME) -- รอระยะเวลาการโคลดาวน์
part.Transparency = 0 -- รีเซ็ตชิ้นส่วนให้เป็นโอเปกทั้งหมด
part:SetAttribute("CoolingDown", false) -- รีเซ็ตค่าตัวละคร
end
end
end
part.Touched:Connect(healPlayer)