هذا المشروع هو مثال آخر على استخدام حلقات for بطريقة عملية. في هذا الجسر، سيقوم اللاعبون بلمس زر لجعل الجسر قابلًا للمشي لفترة محدودة قبل أن يختفي. لإنشاء مؤقت وعرض الوقت المتبقي للاعب، ستستخدم حلقات for.
إعداد المشروع
يمكن تضمين هذا الجسر في أي مشروع Roblox يحتوي على تحديات تعتمد على الحركة، مثل obby.
إنشاء الأجزاء
ابحث عن مكان لبناء جسر، مثل نهر أو فجوة كبيرة في obby. أنشئ ثلاثة أجزاء مثبتة كما هو موضح أدناه.
- TimerDisplay
- Bridge
- ButtonBridge

عندما يكون غير نشط، سيكون الجسر شبه شفاف. للقيام بذلك، حدد Bridge وقم بتغيير خصائصه.
- Transparency = 0.8
- CanCollide = False
إنشاء عرض المؤقت
عند عبور الجسر، سيحتاج اللاعبون إلى رؤية عدد الثواني المتبقية قبل أن يختفي الجسر. إحدى الطرق لعرض الصور أو النصوص هي إضافة كائن يسمى Surface GUI إلى جزء. يمكن أيضًا استخدام Surface GUIs لإنشاء لافتات داخل اللعبة، وأشرطة صحة مخصصة، وأنظمة جرد. ستتناول هذه الدروس هذا بسرعة، ولكن يمكن العثور على مزيد من المعلومات في قسم Tutorials.
حدد TimerDisplay وأضف SurfaceGui. ثم، قم بإضافة TextLabel كطفل لـ Surface Gui.

حدد Surface GUI. في الخصائص، قم بإجراء التغييرات التالية:
- غير Face حتى تتمكن من رؤية نص التسمية على مقدمة المؤقت حيث ينظر اللاعب.
حدد TextLabel. في الخصائص، قم بإجراء التغييرات التالية:
- اضبط Size على {1, 0},{1, 0}.
- اضبط TextScaled على true.
- اجعل Text فارغًا. سيتم تحديث النص باستخدام البرنامج النصي.
إعداد البرنامج النصي
الآن بعد أن أصبح المؤقت في مكانه، أنشئ برنامجًا نصيًا للتحكم في الجسر وعرض رقم العد التنازلي للاعبين.
في جزء Bridge، أضف برنامجًا نصيًا جديدًا باسم TimedBridge. في هذا البرنامج النصي، أنشئ المتغيرات التالية.
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- المدة التي سيبقى فيها الجسر صلبًاlocal timerDuration = 5
برمجة تفاعل اللمس
لاستخدام الجسر، ستحتاج إلى إنشاء دالتين. ستجعل إحدى الدوال الجسر قابلًا للمشي وتعرض المؤقت. ستستمع الدالة الأخرى إذا لمس لاعب الزر الذي ينشط الجسر.
أنشئ دالة جديدة باسم startTimer() مع عبارة طباعة داخلها. ستستخدم عبارة الطباعة لاختبار الكود الخاص بك.
local timerDuration = 5local function startTimer()print("بدأ العد التنازلي")endبرمج دالة باسم buttonPressed() للتحقق مما إذا كان إنسانًا قد لمس الزر. يجب أن تقبل الدالة معلمة partTouched، ثم تحتوي على عبارة if فارغة إذا تم الكشف عن إنسان في ذلك الجزء.
local function startTimer()print("بدأ العد التنازلي")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendلبدء المؤقت، في عبارة if، استدعِ دالة startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendتحت نهاية buttonPressed()، قم بتوصيل دالة buttonPressed() بحدث Touched للزر.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)قم بتشغيل المشروع. المس الجزء وتحقق في نافذة الإخراج لرؤية عبارة الطباعة.
نصائح استكشاف الأخطاء
في هذه المرحلة، إذا لم يعمل الجسر كما هو مقصود، جرب أحد الخيارات التالية أدناه.
المشكلة: رسالة خطأ تقول: "... ليس عضوًا صالحًا في workspace".
- في برنامج TimedBridge النصي، تحقق من أن جميع الأجزاء مكتوبة بالضبط كما تظهر في المستكشف.
المشكلة: لا يمكن رؤية الأجزاء.
- تأكد من أن جميع الأجزاء الثلاثة مثبتة.
- تحقق من خاصية الشفافية للجسر.
إنشاء المؤقت
كلما خطا اللاعبون على الجسر، ستجعل startTimer() الجسر قابلًا للمشي وتبدأ المؤقت. بمجرد أن يصل المؤقت إلى 0، سيصبح الجسر غير قابل للمشي، مما يتسبب في سقوط أي شخص ليس سريعًا بما فيه الكفاية.
جعل الجسر قابلًا للمشي
للبدء، سيحتاج البرنامج النصي إلى جعل الجسر صلبًا، أو قابلًا للاصطدام ثم بدء مؤقت حتى يصبح غير قابل للمشي.
لجعل الجسر قابلًا للمشي، في startTimer()، قم بتغيير خاصية الشفافية للجسر إلى 0 (غير شفاف) وخاصية CanCollide إلى true.
local function startTimer()-- اجعل الجسر مرئيًا وقابلًا للمشيbridge.Transparency = 0bridge.CanCollide = trueendلإنشاء مؤقت يعد تنازليًا، أنشئ حلقة for بالقيم التالية.
- المتغير التحكم: يسمى count، يتم تعيينه إلى timerDuration.
- النهاية: 0
- الزيادة: -1
local function startTimer()-- اجعل الجسر مرئيًا وقابلًا للمشيbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendلعرض المؤقت للاعبين، قم بتغيير النص في timerText لعرض العد عن طريق كتابة timerText.Text = count. في كل مرة تمر فيها حلقة for بتكرار، ستظهر للاعبين الرقم التالي في المؤقت.
for count = timerDuration, 0, -1 dotimerText.Text = countendاستخدم دالة task.wait لجعل حلقة for تعمل مرة واحدة فقط في الثانية.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endقم بتشغيل اللعبة. عندما تلمس الزر، يجب أن يظهر الجسر ويبدأ المؤقت، ثم يكتمل.
منع إعادة تشغيل الجسر
لاحظ أنه إذا تحركت حول الزر، سيستمر المؤقت في إعادة التشغيل.
هذا لأن حلقة for يتم استدعاؤها في كل مرة تلمس فيها الزر وتبدأ حلقة for من البداية. لمنع المؤقت من إعادة التشغيل باستمرار، ستحتاج إلى إضافة متغير منطقي، وهو نوع من المتغيرات، الذي سيتحكم فيما إذا كان يُسمح باستدعاء startTimer() مرة أخرى.
المتغيرات المنطقية تُكتب بنفس طريقة كتابة المتغيرات الأخرى، ولكن بدلاً من استخدام الأرقام أو السلاسل، يمكن تعيينها فقط إلى true أو false. في هذه الحالة، سيستخدم البرنامج النصي متغيرًا منطقيًا للتحقق مما إذا كان المؤقت يعمل حاليًا قبل بدءه.
في أعلى البرنامج النصي الخاص بك، تحت المتغيرات الخاصة بك، أنشئ متغيرًا باسم timerActive واضبطه على false لأنه لم يضغط أحد على الزر بعد.
local timerDuration = 5local timerActive = falselocal function startTimer()للتأكد من أن المؤقت يبدأ فقط عندما يكون المتغير المنطقي timerActive هو false، أضف شرطًا ثانيًا إلى عبارة if في buttonPressed().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendلمنع startTimer() من التشغيل مرة أخرى قبل انتهاء المؤقت، قم بتعيين المتغير المنطقي timerActive إلى true.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueفي دالة startTimer()، بعد حلقة for، قم بإعادة الجسر إلى خصائصه الأصلية عن طريق تغيير شفافية الجسر إلى 0.8 وCanCollide إلى false.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- حلقة for التي تعد تنازليًا من timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- اجعل الجسر غير قابل للمشيbridge.Transparency = 0.8bridge.CanCollide = falseendشيء أخير لإعادة ضبط الجسر هو تغيير timerText إلى سلسلة فارغة كما كانت في الأصل. ثم، قم بتعيين المتغير المنطقي timerActive إلى false.
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseاختبر اللعبة وتحقق من أن الجسر يمكن استخدامه عدة مرات.
البرنامج النصي الكامل للجسر المؤقت
local bridge = script.Parent
-- يحصل على الزر كما هو مكتوب في المستكشف
local button = workspace.ButtonBridge
-- يحصل على الجزء الخاص بالعرض
local timerPart = workspace.TimerDisplay
-- يحصل على النص الذي سيعرض المؤقت
local timerText = timerPart.SurfaceGui.TextLabel
-- المدة التي يجب أن يعبر فيها اللاعبون الجسر
local timerDuration = 5
local timerActive = false
local function startTimer()
print("بدأ العد التنازلي")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- حلقة for التي تعد تنازليًا من timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- اجعل الجسر غير قابل للمشي
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("تم لمس الجزء")
if humanoid and timerActive == false then
print("بدء المؤقت")
startTimer()
end
end
button.Touched:Connect(buttonPressed)الملخص
يمكن دمج الحلقات مع وسائل تفاعل مختلفة لإنشاء لحظات لعب ممتعة. في هذا الدرس، تم إنشاء جسر مؤقت باستخدام حلقة for تعمل كعد تنازلي. خلال العد التنازلي، يُعطى اللاعبون وقتًا محدودًا للعبور.