التطوير / ROBLOX
قائمة Roblox تعود إلى البداية بعد ظهور الشخصية: افحص ScreenGui وResetOnSpawn
افصل بين قالب StarterGui ونسخة اللاعب في PlayerGui، وقارن ثلاثة مواضع لحاوية ScreenGui. يميز هذا التمرين التدريجي استبدال القائمة عن ظهورها وحفظ التقدم والمراجع إلى الشخصية الحالية.
صف أولا ما يختفي فعلا #
قد تصف عبارة القائمة عادت إلى البداية أحداثا مختلفة: لوحة لم تعد ظاهرة، أو نص عاد إلى قيمته الأصلية، أو تبويب مختار أغلق، أو كائن قديم استبدل بآخر. ابدأ بموقف قابل للتكرار. افتح مثلا لوحة تعليمية لمسار، وغير عنوانها، ثم أعد ظهور الشخصية. سجل ظهور اللوحة وقيمة العنوان وتوفر الزر كل واحد على حدة. استنتاج عام واحد لا يغني عن هذه الملاحظات ولا يحدد الجزء الذي يحتاج التحقيق.
يستخدم التمرين لوحة خيالية يبدأ عنوانها بعبارة لم يختر مسار. بعد التغيير تعرض اختير المسار الشمالي. هذه علامات تعليمية أصلية لمشروع منفصل، وليست ادعاءات عن وظائف ألعابنا الخمس. يقترح المقال فحصا ذاتيا اعتمادا على شروط رسمية. لم ننفذ هذا التجريب المحدد في Roblox Studio بعد، لذلك لا نقدم التوقعات المذكورة في الوثائق على أنها نتائج مقاسة أو تقرير اختبار فعلي.
ميز القالب عن نسخة اللاعب #
يصف الدليل الرسمي StarterGui بأنه مكان إعداد الواجهة على الشاشة. عند ظهور الشخصية أول مرة، تنسخ ScreenGui ومحتوياتها إلى PlayerGui لذلك اللاعب. التمييز بين الموقعين ضروري للتمرين. العنوان الذي أعددته قبل التشغيل ينتمي إلى القالب، بينما يتيح تغيير عنوان النسخة أثناء التشغيل علامة قابلة للملاحظة، تساعد على فحص بقاء حالة اللوحة في هذه الجلسة بعد إعادة ظهور الشخصية.
اكتب قبل الاختبار مسارين: الحاوية الأصلية تحت StarterGui، والنسخة التي تجدها داخل Players ثم اللاعب المختار وPlayerGui. لا تعدل لوحة مشابهة لمجرد أن اسمها مألوف. تحقق أثناء التمرين من أنك تغير نسخة العميل المقصود. بعد إيقاف الاختبار راجع الهيكل الأصلي من جديد. يجب ألا تصبح تعديلات الحالة المؤقتة بصمت شروط بداية مختلفة للمقارنة التالية، وإلا فقد تصف النتائج إعدادات غير متطابقة.
جهز ثلاثة مواضع مستقلة #
أنشئ مشروعا تعليميا منفصلا بظهور عادي للشخصية. ضع ScreenGui ذات الاسم الفريد RespawnA مباشرة تحت StarterGui، واضبط ResetOnSpawn=true. أضف بجانبها RespawnB بالقيمة ResetOnSpawn=false. ثم أنشئ Folder باسم RespawnFolder داخل StarterGui، وضع فيها ScreenGui ثالثة باسم RespawnC، أيضا بالقيمة ResetOnSpawn=false. الأسماء والترتيب تسميات أصلية للتمرين كي يكون كل واحد من الحالات الثلاث واضحا وقابلا للمقارنة دون التباس.
أنشئ داخل كل ScreenGui عنصرا بسيطا من TextLabel باسم RouteLabel، واجعل نصه الأول لم يختر مسار. ضع العناوين الثلاثة في مناطق مختلفة من الشاشة حتى لا تتراكب. لا تضف متجرا أو حفظا أو تحميل موارد أو معالجات معقدة بعد. المهمة الأولى تخص دورة حياة الحاويات فقط. سجل المسار الكامل وقيمة الخاصية لكل حالة قبل التشغيل، لتصف المقارنة اللاحقة الشروط الفعلية بدلا من التخمين.
اقرأ شرط ResetOnSpawn كاملا #
يربط جدول الشروط الرسمي ResetOnSpawn=true بإعادة الضبط. الاحتفاظ بالحاوية يحتاج false ووجود ScreenGui مباشرة تحت StarterGui. أما العنصر غير المباشر، مثل ScreenGui داخل Folder تحت StarterGui، فيعاد ضبطه أيضا. لذلك لا يكفي فحص false وحدها؛ موقع الحاوية جزء من الشرط. يوضح هذا لماذا يمكن لنقل القائمة إلى مجلد تغيير السلوك المتوقع رغم بقاء قيمة الخاصية نفسها كما كانت.
التوقعات الموثقة لتسمياتنا هي: A تعاد إلى البداية، وB تبقى، وC تعاد إلى البداية. اكتب ذلك أولا في عمود المتوقع لا في عمود المشاهد. املأ العمود الثاني بعد فحصك الخاص. إذا اختلفت النتيجة، احتفظ بالسجلين وراجع المسار والخاصية والنسخة أثناء التشغيل. لا تعدل الشروط بأثر رجعي كأن موضعا آخر اختبر منذ البداية؛ قد يكشف الاختلاف تفصيلا في الإعداد يحتاج المراجعة.
| الموضع | المتوقع |
|---|---|
| A: مباشرة,true | الحاوية تعاد |
| B: مباشرة,false | الحاوية تبقى |
| C: في Folder,false | الحاوية تعاد |
غير حالة النسخة أثناء التشغيل #
شغل المشروع التعليمي وانتظر الشخصية والعناوين المقروءة. ابحث عن الحاويات الثلاث في PlayerGui للعميل المختار باستخدام أسمائها الفريدة. غير قيمة Text لكل RouteLabel أثناء التشغيل إلى اختير المسار الشمالي. تأكد من ظهور النص الجديد في اللوحة الصحيحة. لا تعدل في الوقت نفسه نص القالب في StarterGui؛ فقد تبدو نسخة جديدة كأنها نسخة قديمة محفوظة، فتخفي الاستبدال الذي تريد التحقق منه.
سجل النص الأول والنص المعدل وطريقة التغيير. إذا لم تجد الكائن الصحيح أو لم يتغير العنوان الظاهر، افحص هذه الخطوة أولا. دون حالة أولية مؤكدة تصبح المقارنة التالية ملتبسة. تكفي علامة واضحة واحدة لهذا التمرين. إعدادات مخفية عديدة وقوائم تعمل معا تضيف أسبابا يصعب تمييزها عن استبدال ScreenGui، وتجعل إعادة المحاولة بالشروط نفسها أكثر تعقيدا دون أن تقدم دليلا أفضل.
أعد ظهور الشخصية وقارن النتائج #
استخدم فعل إعادة ظهور الشخصية المتاح في الاختبار، وانتظر عودة شخصية قابلة للتحكم والواجهة. اقرأ بعد ذلك A وB وC كل واحدة على حدة. سجل بقاء النص المعدل أو عودة النص الأول، وهل اللوحة ظاهرة أصلا. المهم الحالة بعد اكتمال إعادة الظهور، وليس اختفاء الواجهة لحظة أثناء الانتقال. شاشة الانتظار ليست النتيجة النهائية للمقارنة، فلا تسجلها مبكرا باعتبارها نجاحا أو فشلا.
كرر المقارنة مرة أخرى بعد تعيين عنوان معدل واضح للنسخ الحالية من جديد. إذا اختلفت النتيجتان، فلا تحول محاولة واحدة إلى قاعدة عامة. احتفظ بالسياق: الكائنات الموجودة، ومكان تعديل القيمة، والسكربتات الإضافية العاملة. هنا نقترح تسلسلا للفحص. أما النصوص الفعلية وأوقات ظهور اللوحات فيجب تسجيلها من تشغيلك، لا نسخها من جدول المتوقع إلى خانة الملاحظات وكأنها حصلت بالفعل.
لا تخلط Enabled باستبدال الكائن #
تتحكم Enabled في ظهور حاوية الشاشة ونشاطها. يوضح الدليل الرسمي أن الحاوية المعطلة لا ترسم محتواها ولا تعالج الإدخال. هذا سؤال مختلف عن الحذف وإعادة النسخ عند الظهور. إذا لم تر العنوان، افحص Enabled في ScreenGui الحالية. ثم راجع أسبابا أخرى، مثل موضع العنصر الابن أو لوحة تغطيه أو منطق الإظهار والإخفاء الخاص بك، بدلا من اعتبار كل عنوان غائب دليلا على الاستبدال.
خصص عمودا منفصلا لـ Enabled، ولا تستخدمه بدلا من عمود بقاء النص. قد تحتوي لوحة مخفية على العنوان المعدل، وقد تعرض لوحة جديدة ظاهرة النص الأول. الاسم المتطابق لا يثبت أيضا أنها النسخة نفسها. المقارنة الصارمة للمراجع تحتاج اختبارا مستقلا بأدوات قياس. علامتنا النصية تختبر حالة اللوحة القابلة للملاحظة، ولا نقدمها كإثبات كامل لهوية الكائنات أو بقاء كل تفاصيل سلوكها الداخلي.
راجع الاعتماد على الشخصية الحالية #
بقاء القائمة لا يعني أن كل ما يرتبط بها يتحدث تلقائيا. قد يحتفظ كود اللوحة بمرجع إلى الشخصية التي كانت موجودة قبل إعادة الظهور. افصل مطلب الاحتفاظ بالتبويب المختار عن تحديث معلومات الشخصية الجديدة؛ إنهما مهمتان مختلفتان في التطوير. حدد أولا البيانات التي تعبر عن اختيار المستخدم، والبيانات التي يجب أن تتبع كائنا حاليا في اللعب بدلا من النسخة السابقة منه.
جهز للوحة التعليمية قائمة اعتماد: المسار المختار، وعنوان الصحة، ومرجع Character، والأحداث المتصلة. الأولى فقط ترتبط مباشرة بعلامتنا النصية، أما الباقي فيحتاج فحوصا منفصلة في التطبيق الحقيقي. لا تعد بإصلاح المراجع القديمة من خلال ResetOnSpawn=false وحدها. تحتاج الاتصالات الجديدة بالأحداث أيضا إلى مالك واضح وتنظيف الاتصال القديم، كي لا يؤدي إصلاح القائمة إلى ردود فعل مكررة بالخطأ. دورة حياة الواجهة لا تعوض دورة حياة الاشتراك.
ميز الواجهة المحتفظ بها عن التقدم المحفوظ #
الملاحظة بعد إعادة الظهور تصف الواجهة داخل التشغيل الحالي. لا تثبت بقاء اختيار المسار بعد الخروج من اللعبة أو الدخول من جهاز آخر أو تبديل الخادم. تلك المتطلبات تحتاج بيانات وفحوصا خاصة لآلية الحفظ. لا تسم ResetOnSpawn نظام حفظ. تغيير النص في هذا التمرين علامة لحالة القائمة، وليس إنجاز لاعب كتب في تخزين دائم أو تأكيدا لاستعادة التقدم بين جلسات مختلفة.
إذا كانت CharacterAutoLoads معطلة، يربط الدليل النسخ الأولي من StarterGui باستدعاء LoadCharacterAsync. يختلف هذا المشروع عن إعدادنا البسيط. سجل الوضع أولا ثم افحص وقت ظهور الواجهة لأول مرة. لا تخلط غياب النسخة الأولى باختفاء الواجهة بعد ظهور لاحق. ابدأ بالظهور العادي، ثم أضف الأوضاع الأخرى كحالات مستقلة، لكل منها توقعات وملاحظات وشروط محددة بدلا من دمج نتائجها في المقارنة نفسها.
أنه الفحص بجدول مقارنة واضح #
احتفظ لـ A وB وC بالمسار وResetOnSpawn والسلوك المتوقع والنص المشاهد بعد كل محاولة وEnabled. أضف أن المقارنة لا تشمل الحفظ أو جميع المعالجات أو مراجع Character الجديدة. يستطيع مطور آخر بذلك تكرار الحالة وفهم حدود الاستنتاج. إذا اختبرت الموضع المباشر B فقط، فلا تصف النتيجة بأنها فحص منفذ للحالات الثلاث. يجب أن يعكس الجدول التغطية الفعلية، بما فيها الأجزاء التي لم تختبر.
بعد المقارنة اختر دورة حياة مناسبة لغرض قائمتك. قد تتطلب المقدمة لمرة واحدة والإعدادات ومعلومات الشخصية سياسات مختلفة للحالة. حدد السلوك المقصود قبل ضبط الحاوية والكود. لا يغير التمرين الأصلي ألعابا منشورة ولا يستخدم لقطات مستعارة. راجع الشروط الحالية في المصادر الرسمية، وأضف للتقرير النهائي فقط ملاحظات حصلت عليها فعلا في تطبيقك، دون إكمال الأجزاء الناقصة بالتوقعات أو التخمين.
| الحقل | ما تسجله |
|---|---|
| المسار | المسار الكامل |
| ResetOnSpawn | القيمة الفعلية |
| النص بعد الظهور | ملاحظة لا توقع |
| Enabled | منفصل عن بقاء النص |
المصادر الأصلية
Roblox Creator Hub — On-screen UI containersRoblox Creator Hub — LayerCollector