دروس تعليمية متوسطة

فخ التلاشي

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

في الحمم القاتلة، تعلمت كيفية تحفيز الكود بناءً على سلوك المستخدم. توضح لك هذه الدورة كيفية صنع منصة تتلاشى عندما يدوس عليها المستخدم.

الإعداد

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

  1. أضف جزءًا وحرّكه إلى مكانه في عالمك. سمّه FadingPlatform.

  2. قم بإعادة حجمه بحيث يتمكن المستخدم من القفز عليه.

  3. تأكد من أنه ثابت.

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

  5. أنشئ متغيرًا للمنصة ووظيفة فارغة مرتبطة بحدث Touched الخاص بالمنصة.


    local platform = script.Parent
    local function fade()
    end
    platform.Touched:Connect(fade)

جعل المنصة تتلاشى

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

يمكنك تغيير خاصية Transparency وانتظار وقت قصير جدًا مرارًا وتكرارًا للحصول على هذا التأثير، ولكن التلاشي التدريجي سيتطلب على الأقل 10 تغييرات بين 0 و 1. هذا 20 سطرًا من الكود المتكرر جدًا.

يمكن تحقيق ذلك بشكل أكثر فعالية باستخدام حلقة for التي تكرر الكود عددًا محددًا من المرات. تُعرف كل دورة من الكود باسم تكرار. تُعرف حلقة for بثلاثة أشياء، مفصولة بفواصل:

  • متغير التحكم - المتغير الذي تم إنشاؤه ويستخدم لعد الحلقات. في هذا المثال، هو count والقيمة الابتدائية هي 1.
  • قيمة النهاية - القيمة التي يجب أن تصل إليها لتتوقف الحلقة. في هذا المثال، هي 10.
  • زيادة الخطوة (اختياري) - تحدد ما يجب إضافته إلى متغير التحكم في كل حلقة. إذا تم تركه، فإنه يتعطل افتراضيًا إلى 1، لذلك في هذا المثال هو غير ضروري.

في FadeOnTouch:

  1. في الوظيفة، قم بإنشاء حلقة for تبدأ من 1 وتكرر 10 مرات.

  2. داخل حلقة for، اضبط خاصية Transparency على متغير التحكم مقسومًا على 10.

  3. استدعِ دالة task.wait() مع وقت 0.1.


    local platform = script.Parent
    local function fade()
    for count = 1, 10 do
    platform.Transparency = count / 10
    task.wait(0.1)
    end
    end
    platform.Touched:Connect(fade)

عندما تعمل الحلقة، يزداد العدد بمقدار 1 مع كل تكرار. هذا يعني أن شفافيه المنصة ستزداد بمقدار 0.1 كل 0.1 ثانية، وتصل إلى الشفافية الكاملة بعد 1 ثانية.

إعادة الظهور

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

  1. اضبط خاصية CanCollide الخاصة بالمنصة إلى false بعد حلقة for.

  2. انتظر بضع ثوانٍ باستخدام دالة task.wait().

  3. اضبط خاصية CanCollide مرة أخرى إلى true.

  4. اضبط خاصية Transparency مرة أخرى إلى 0.


    local platform = script.Parent
    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)

متغير منع التكرار

في الحمم القاتلة، تعلمت أن حدث 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 غير صحيح. قم بتغليف جسم دالة التلاشي في عبارة 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 تكون صحيحة و not isTouched يتقييم إلى true. لإكمال روتين منع التكرار، ستحتاج إلى تبديل قيمة المتغير في مكانين.

  1. اجعل isTouched تساوي true داخل عبارة if، قبل أن تبدأ المنصة في التلاشي.
  2. قم بإعادتها إلى 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)
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.