Debounce desenleri

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

A debounce deseni, bir fonksiyonun çok fazla kez çalışmasını veya bir girdinin birden fazla kez tetiklenmesini engelleyen bir kodlama tekniğidir. Aşağıdaki betik senaryoları, debouncenin en iyi uygulama olarak nasıl kullanılacağını gösterir.

Çarpışmaları tespit etme

Varsayalım ki, dokunulduğunda 10 hasar veren tehlikeli bir tuzak parçası oluşturmak istiyorsunuz. İlk uygulama, basit bir BasePart.Touched bağlantısı ve şöyle bir damagePlayer fonksiyonu kullanabilir:

Script - Hasar Verme

local part = script.Parent
local function damagePlayer(otherPart)
print(part.Name .. " ile " .. otherPart.Name .. " çarpıştı")
local humanoid = otherPart.Parent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health -= 10 -- Oyuncunun sağlığını azalt
end
end
part.Touched:Connect(damagePlayer)

İlk bakışta mantıklı görünüyor olsa da, test etme, Touched olayının ince fiziksel çarpışmalara dayalı olarak hızlı bir şekilde birden fazla kez ateş ettiğini gösterecektir.

İlk temasta aşırı hasar vermekten kaçınmak için, hasarın bir örnek niteliği üzerinden bir bekleme süresi zorunlu kılan bir debounce sistemi ekleyebilirsiniz.

Script - Debounce Kullanarak Hasar Verme

local part = script.Parent
local RESET_TIME = 1
local function damagePlayer(otherPart)
print(part.Name .. " ile " .. otherPart.Name .. " çarpıştı")
local humanoid = otherPart.Parent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
if not part:GetAttribute("Touched") then
part:SetAttribute("Touched", true) -- Nitelik değerini true olarak ayarla
humanoid.Health -= 10 -- Oyuncunun sağlığını azalt
task.wait(RESET_TIME) -- Sıfırlama süresince bekle
part:SetAttribute("Touched", false) -- Niteliği sıfırla
end
end
end
part.Touched:Connect(damagePlayer)

Sesleri tetikleme

Debounce, ses efektleri ile çalışırken de yararlıdır. Örneğin, iki parça çarpıştığında bir ses çalmak (Touched) veya bir kullanıcı ekrandaki bir düğmeye etkileşimde bulunduğunda Activated olayında bir ses çalmak için kullanılabilir. Her iki durumda da, Sound:Play() çağrısı, parça başlangıcından çalma işlemini başlatır ve — bir debounce sistemi olmadan — ses, hızlı bir şekilde birden fazla kez çalabilir.

Ses üst üste gelmelerini önlemek için, Sound nesnesinin IsPlaying niteliğini kullanarak debounce yapabilirsiniz:

Script - Debounce Kullanarak Çarpışma Sesi Çalma

local projectile = script.Parent
local function playSound()
-- Parçada bulunan ses nesnesini bul
local sound = projectile:FindFirstChild("Impact")
-- Ses zaten çalmıyorsa çal
if sound and not sound.IsPlaying then
sound:Play()
end
end
projectile.Touched:Connect(playSound)
Script - Debounce Kullanarak Düğme Tıklama Sesi Çalma

local button = script.Parent
local function onButtonActivated()
-- Düğmede bulunan ses nesnesini bul
local sound = button:FindFirstChild("Click")
-- Ses zaten çalmıyorsa çal
if sound and not sound.IsPlaying then
sound:Play()
end
end
button.Activated:Connect(onButtonActivated)

Toplama efektleri

Oyunlar genellikle 3D dünyada medkitler, mermi paketleri ve daha fazlası gibi toplanabilir nesneleri içerir. Eğer bu toplama nesnelerini oyuncuların tekrar tekrar alabileceği şekilde tasarlıyorsanız, toplama yeniden etkinleşmeden önce bir "bekleme" süresi eklenmelidir.

Çarpışmaları tespit etme ile benzer şekilde, debounce durumunu bir örnek niteliği ile yönetebilir ve bekleme süresini parça üzerindeki Transparency niteliğini değiştirerek görselleştirebilirsiniz.

Script - Debounce Kullanarak Sağlık Alımı

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) -- Nitelik değerini true olarak ayarla
humanoid.Health += 25 -- Oyuncunun sağlığını artır
part.Transparency = 0.75 -- Bekleme durumunu göstermek için parçayı yarı saydam yap
task.wait(COOLDOWN_TIME) -- Bekleme süresince bekle
part.Transparency = 0 -- Parçayı tamamen opak hale getir
part:SetAttribute("CoolingDown", false) -- Niteliği sıfırla
end
end
end
part.Touched:Connect(healPlayer)
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.