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

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

حدد Surface GUI. في الخصائص، أجرِ التغييرات التالية:
- قم بتغيير الوجه بحيث يمكنك رؤية علامة النص في مقدمة المؤقت حيث ينظر اللاعب.
حدد TextLabel. في الخصائص، أجرِ التغييرات التالية:
- اضبط الحجم إلى {1, 0},{1, 0}.
- اضبط TextScaled إلى true.
- اضبط النص ليكون فارغًا. سيتم تحديث النص باستخدام البرنامج النصي.
إعداد البرنامج النصي
الآن بعد أن تم وضع المؤقت، أنشئ برنامجًا نصيًا للتحكم في الجسر وعرض الرقم المتناقص للاعبين.
في جزء الجسر، أضف برنامجًا نصيًا جديدًا يسمى 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 غير صحيح، أضف شرطًا ثانيًا في جملة 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 والتي تعمل كعداد تنازلي. خلال العد التنازلي، يُعطى اللاعبون وقتًا محدودًا لعبور الجسر.