أنماط التوقف

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

يعتبر نمط التوقف تقنية برمجية تمنع وظيفة من التشغيل عدة مرات أو تمنع إدخال ما من الت-trigger عدة مرات. السيناريوهات البرمجية التالية توضح التوقف كأفضل ممارسة.

الكشف عن الاصطدامات

افترض أنك تريد إنشاء جزء فخ خطير يسبب ضررًا قدره 10 عند لمسه. قد تستخدم تنفيذًا أوليًا عبارة عن اتصال أساسي BasePart.Touched ووظيفة damagePlayer مثل هذه:

Script - Damage Player

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 يتم تشغيله عدة مرات بسرعة بناءً على الاصطدامات الفيزيائية الدقيقة.

لتجنب التسبب في ضرر مفرط عند الاتصال الأولي، يمكنك إضافة نظام توقف يفرض فترة تباطؤ على الضرر من خلال سمة مثيل.

Script - Damage Player Using 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)

تشغيل الأصوات

يكون التوقف مفيدًا أيضًا عند العمل مع تأثيرات الصوت، مثل تشغيل صوت عند اصطدام جزئين (Touched)، أو تشغيل صوت عند حدث Activated عندما يتفاعل المستخدم مع زر على الشاشة. في كلا الحالتين، فإن استدعاء Sound:Play() يبدأ التشغيل من بداية مقطوعة الصوت ومن دون نظام توقف، يمكن أن يتم تشغيل الصوت عدة مرات بسرعة.

لتجنب تداخل الأصوات، يمكنك استخدام التوقف من خلال خاصية IsPlaying لجسم Sound:

Script - Play Collision Sound Using 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)
Script - Play Button Click Using 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)

تأثيرات التجميع

غالبًا ما تتضمن الألعاب تجمعات قابلة للتجميع في العالم ثلاثي الأبعاد مثل صناديق الصحة، وحزم الذخيرة، والمزيد. إذا قمت بتصميم هذه المجموعات لتبقى في العالم ليتجمعها اللاعبون مرارًا وتكرارًا، يجب إضافة وقت "نعاس" قبل أن تتجدد المجموعة وتعيد تنشيطها.

شبيه بـ الكشف عن الاصطدامات، يمكنك إدارة حالة التوقف باستخدام سمة مثيل، ورؤية فترة النعاس عن طريق تغيير شفافية الجزء Transparency.

Script - Health Pickup Using 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)
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.