Mẫu bật chuẩn

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Một mẫu debounce là một kỹ thuật lập trình khiến cho một chức năng không thể chạy quá nhiều lần hoặc một lượng dữ liệu được kích hoạt quá nhiều lần. Các kịch bản script sau đây minh họa debounce như một hành động tốt nhất.

Ngược phản Collisions

Supply you want to create a hazardous trap part that inflicts 10 damage when touched. An initial implementation might use a basic BasePart.Touched connection and a damagePlayer function like this:

Script - Tổng sát thương người chơi

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 -- Giảm sức khỏe người chơi
end
end
part.Touched:Connect(damagePlayer)

Mặc dù rất hợp lý vào lúc đầu, nhưng kiểm tra sẽ cho thấy rằng sự kiện Touched được kích hoạt nhiều lần trong thành công nhanh chóng dựa trên những va chạm vật lý tinh tế.

Để tránh gây sát thương quá mức trong lần tiếp liên hệđầu tiên, bạn có thể thêm một hệ thống giảm giảm giác dùng để thúc đẩy thời gian hồi phục của sát thương qua một tính năng của một đối tượng .

Script - Sử dụng Debounce để làm hại người chơi

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) -- Đặt thuộc tính để true
humanoid.Health -= 10 -- Giảm sức khỏe người chơi
task.wait(RESET_TIME) -- Đợi thời gian đặt lại
part:SetAttribute("Touched", false) -- Đặt lại giá trị
end
end
end
part.Touched:Connect(damagePlayer)

Âm thanh bắt đầu

Debounce cũng hữu ích khi làm việc với hiệu ứng âm thanh, chẳng hạn như chơi một âm thanh khi hai bộ phận va chạm ( Touched ) hoặc chơi mộ

Để ngăn chặn sự lệch âm, bạn có thể bật lên bằng cách sử dụng IsPlaying tính chất của Sound đối tượng:

Script - Chơi âm thanh va chạm bằng cách sử dụng Debounce

local projectile = script.Parent
local function playSound()
-- Tìm âm thanh con trên bộ phận
local sound = projectile:FindFirstChild("Impact")
-- Chơi âm thanh chỉ nếu nó chưa đang chơi
if sound and not sound.IsPlaying then
sound:Play()
end
end
projectile.Touched:Connect(playSound)
Script - Nhấn nút chơi sử dụng Debounce

local button = script.Parent
local function onButtonActivated()
-- Tìm âm thanh con trên nút
local sound = button:FindFirstChild("Click")
-- Chơi âm thanh chỉ nếu nó chưa đang chơi
if sound and not sound.IsPlaying then
sound:Play()
end
end
button.Activated:Connect(onButtonActivated)

Hiệu ứng đón

Những trải nghiệm thường có các kẻ thu thập đồ trong thế giới 3D như dụng cụ y tế, gói đạn, và nhiều hơn nữa. Nếu bạn thiết kế những kẻ thu thập này để ở lại trong thế giới cho người chơi lấy một lần nữa và lần sau, thời gian "chờ đợi" sẽ

Tương tự như 检测碰撞, bạn có thể quản lý trạng thái hồi phục với một thuộc tính instan , và hiển thị thời gian hồi phục bằng cách thay đổi Transparency của bộ phận.

Script - Tìm kiếm sức khỏe bằng cách sử dụng 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) -- Đặt thuộc tính để true
humanoid.Health += 25 -- Tăng sức khỏe người chơi
part.Transparency = 0.75 -- Làm cho bộ phận bán trong suốt để cho thấy trạng thái đang đếm ngược
task.wait(COOLDOWN_TIME) -- Đợi thời gian冷却
part.Transparency = 0 -- Đặt lại phần để hoàn toàn bị mờ
part:SetAttribute("CoolingDown", false) -- Đặt lại giá trị
end
end
end
part.Touched:Connect(healPlayer)