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

أدخل سكريبت في الجزء، وأعد تسميته إلى FadeOnTouch، واحذف الكود الافتراضي.

أنشئ متغيرًا للمنصة ودالة فارغة مرتبطة بحدث Touched للمنصة.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
تلاشي المنصة
إن جعل المنصة تختفي في لحظة سيكون غير ممتع على الإطلاق حيث سيجد المستخدمون أنه من المستحيل عبور الفجوة. بدلاً من ذلك، يجب أن تتلاشى المنصة قبل أن يسقط المستخدمون من خلالها لإعطائهم فرصة للقفز.
يمكنك تغيير خاصية Transparency وانتظار فترة زمنية قصيرة جدًا مرارًا وتكرارًا للحصول على هذا التأثير، ولكن التلاشي التدريجي سيتطلب على الأقل 10 تغييرات بين 0 و 1. هذا يعني 20 سطرًا من الكود المتكرر جدًا.
يمكن تحقيق ذلك بشكل أكثر فعالية باستخدام حلقة for التي تكرر الكود عددًا محددًا من المرات. كل تكرار من الكود يُعرف باسم تكرار. يتم تعريف حلقة for بثلاثة أشياء، مفصولة بفواصل:

- متغير التحكم - المتغير الذي تم إنشاؤه واستخدامه لعد الحلقات. في هذا المثال، هو count والقيمة الابتدائية هي 1.
- قيمة النهاية - القيمة التي يجب أن تصل إليها لتتوقف الحلقة. في هذا المثال، هي 10.
- زيادة الخطوةاختياري- تحدد ما يجب إضافته إلى متغير التحكم في كل حلقة. إذا تم تركها، فإنها تعود إلى 1، لذا في هذا المثال، فهي غير ضرورية.
في FadeOnTouch:
في الدالة، أنشئ حلقة for تبدأ من 1 وتكرر 10 مرات.
داخل حلقة for، قم بتعيين خاصية Transparency إلى متغير التحكم مقسومًا على 10.
استدعِ دالة task.wait() مع وقت قدره 0.1.
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
عندما تعمل الحلقة، يزداد العد بمقدار 1 مع كل تكرار. هذا يعني أن Transparency للمنصة ستزداد بمقدار 0.1 كل 0.1 ثانية، لتصل إلى الشفافية الكاملة بعد 1 ثانية.
إعادة الظهور
بعد أن تختفي المنصة، يجب أن يسقط المستخدمون من خلالها. يجب أن تعود المنصة أيضًا بعد بضع ثوانٍ من تلاشيها - وإلا فلن يتمكن المستخدمون من تجربة القفز مرة أخرى إذا فشلوا. تتحكم خاصية CanCollide في ما إذا كان يمكن للمستخدمين السقوط من خلال جزء.
قم بتعيين خاصية CanCollide للمنصة إلى false بعد حلقة for.
انتظر لبضع ثوانٍ باستخدام دالة task.wait().
قم بتعيين خاصية CanCollide مرة أخرى إلى true.
قم بتعيين خاصية Transparency مرة أخرى إلى 0.
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endplatform.CanCollide = falsetask.wait(3)platform.CanCollide = trueplatform.Transparency = 0endplatform.Touched:Connect(fade)
متغير التبديل
في الحمم القاتلة، تعلمت أن حدث Touched يعمل في كل مرة يتلامس فيها جزء من جسم المستخدم مع الجزء. يتسبب هذا السلوك في مشاكل عندما يجري المستخدم عبر المنصة المتلاشية: ستعمل الدالة عدة مرات، مما يعيد تعيين الحلقة في كل مرة.
لكي يعمل الكود بشكل صحيح، يجب أن تعمل الدالة مرة واحدة فقط عندما يلمس المستخدم المنصة للمرة الأولى. التأكد من أن الإجراء يتم تشغيله مرة واحدة فقط عندما كان من الممكن تشغيله عدة مرات يُعرف باسم التبديل.
لتبديل دالة، يمكن استخدام متغير boolean لتتبع متى تم لمس المنصة بالفعل. يمكن أن تحتوي القيم البوليانية فقط على قيم true و false. أنشئ متغيرًا يسمى isTouched واضبطه على false.
local platform = script.Parent
local isTouched = false
local function fade()
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
platform.Touched:Connect(fade)تحقق من المتغير
يمكن استخدام عبارة if لتشغيل الكود في دالة التلاشي فقط إذا كانت متغير التبديل isTouched هو false. قم بتغليف جسم دالة التلاشي في عبارة if مع الشرط not isTouched.
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
end
platform.Touched:Connect(fade)يعمل عامل التشغيل not في Luau على عكس قيمة ما يتبعه. من حيث الشروط، يعني هذا أن عبارة if الأولى تتصرف بنفس الطريقة التي تتصرف بها العبارات التي تليها.
if not isTouched then
end
if isTouched == false then
end
if isTouched == nil then
endتبديل التبديل
حاليًا، سيعمل الكود في دالة fade دائمًا لأن isTouched هو false و not isTouched يقيم إلى true. لإكمال روتين التبديل، ستحتاج إلى تبديل قيمة المتغير في مكانين.
- قم بتعيين isTouched إلى true داخل عبارة if، قبل أن تبدأ المنصة في التلاشي.
- قم بإعادته إلى false بمجرد أن تعود المنصة.
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)وهذا كل شيء! اختبر كودك الآن، ويجب أن تجد أن المنصة تتلاشى عندما يقفز المستخدم عليها وتعود بعد بضع ثوانٍ.
يمكنك تكرار هذه المنصة عبر فجوة أوسع لإنشاء عقبة تحدي وتغيير السرعة التي تتلاشى بها لتوازن الصعوبة.
الكود النهائي
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)