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

كشف إدخال المستخدم

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

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

ابدأ

يستخدم هذا البرنامج التعليمي أداة Blaster التي تم إنشاؤها في إنشاء أدوات اللاعب. يمكنك اتباع تلك التعليمات لإنشاء الأداة أو يمكنك تنزيل نموذج Blaster وإدراجه في StarterPack.

يمكن إضافة النماذج إلى مخزونك ليتم استخدامها بين أي تجربة. لإضافة نموذج إلى تجربتك:

  1. في متصفح، افتح صفحة النموذج، انقر فوق زر الحصول. هذا يضيف النموذج إلى مخزونك.
  2. من قائمة نافذة في البرنامج أو شريط أدوات علامة التبويب الصفحة الرئيسية، افتح Toolbox وحدد علامة التبويب المخزون.
  3. تأكد من أن القائمة المنسدلة على نمو009ردي.
  4. حدد نموذج Blaster لإضافته إلى التجربة.

إنشاء معالج للإجراء

أولاً، ستحتاج إلى دالة للتعامل مع الكشف عن إدخال المستخدم.

  1. افتح LocalScript داخل ToolController داخل Blaster.

    عرض لـ Explorer حيث تم اختيار برنامج ToolController داخل أداة Blaster

  2. أنشئ متغيرًا لتخزين اسم للإجراء.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  3. أنشئ دالة باسم onAction تستقبل ثلاثة وسائط: actionName، inputState، و inputObject. ستكون هذه هي الدالة التي تعمل عندما يتم الكشف عن إدخال المستخدم.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. داخل الدالة، تحقق من أن actionName المعطاة تتطابق مع اسم إجراء إعادة التحميل وتأكد من أن inputState هو UserInputState.Begin (حالة البدء). هذا مهم لأن الدالة ستعمل في كل مرة يتغير فيها inputState، لكن إعادة التحميل تحتاج فقط إلى الحدوث مرة واحدة.


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. لجعل الأمر واضحًا عندما يقوم المستخدم بإعادة التحميل، غير TextureId للأداة إلى "rbxassetid://6593020923" للحظة، ثم ارجعه إلى قيمته الأصلية "rbxassetid://92628145".


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

ربط الإجراء

يمكن استخدام ContextActionService لربط دالة بإدخال معين باستخدام دالة BindAction، التي تقبل عدة وسائط:

  • اسم الإجراء.
  • الدالة للتعامل مع الإجراء (تسمى أيضًا "الإرجاع").
  • ما إذا كان يجب عرض زر شاشة اللمس أم لا.
  • أي عدد من Enum.KeyCodes للكشف عنها وربطها بالإجراء.

KeyCodes هي قيم تمثل أزرار إدخال مختلفة، مثل مفاتيح لوحة المفاتيح أو أزرار وحدة التحكم. قائمة كاملة من الرموز متوفرة هنا.

  1. احصل على ContextActionService في أعلى البرنامج.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. داخل دالة toolEquipped، استدعِ BindAction ومرر الوسائط التالية:

    • اسم الإجراء (RELOAD_ACTION)
    • معالج الإجراء (onAction)
    • قيمة لإنشاء زر لمسة (true)
    • مفتاح للكشف عنه (Enum.KeyCode.R)

    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
  3. اختبر اللعبة عن طريق تجهيز الأداة وضغط على مفتاح R في لوحة المفاتيح الخاصة بك. يجب أن يتغير رمز الحقيبة لفترة قصيرة إلى رمز انتظار للإشارة إلى أن السلاح يعيد التحميل:

فك ارتباط الإجراء

عندما يقوم المستخدم بفك تجهيز الأداة، يحتاج الإجراء إلى أن يكون غير مرتبط حتى لا يتمكن من إعادة التحميل دون تجهيز الأداة.

  1. أنشئ دالة جديدة تسمى toolUnequipped واستدعِ UnbindAction، مع تمرير اسم الإجراء.


    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  2. قم بتوصيل دالة toolUnequipped بحدث Unequipped حتى تعمل الدالة عندما ينطلق الحدث.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Unequipped:Connect(toolUnequipped)
    tool.Activated:Connect(toolActivated)
  3. اختبر اللعبة للتأكد من أن كل شيء يعمل بشكل صحيح. يجب أن تكون قادرًا على إعادة التحميل عندما تكون الأداة مجهزة، ولكن ليس عندما تكون غير مجهزة.

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

©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.