رأينا في الدرس السابق أنّ المشهد عبارة عن مجموعة من العقد المنظمة على شكل شجرة مع عقدة جذر واحدة، كما تعرفنا على إمكانية تقسيم مشروعك إلى أي عدد تريده من المَشاهد، حيث تساعدك هذه الميزة في تقسيم وتنظيم مكونات لعبتك المختلفة.
يمكنك في محرك جودو إنشاء العديد من المَشاهد بالطريقة التي ترغب بها وحفظها كملفات بامتداد .tscn
والذي تعني مشهدًا نصيًا وكان ملف label.tscn
من الدرس السابق مثالًا على ذلك. ونسمّي تلك الملفات مَشاهد مُخزنّة لأنها تخزن معلومات حول محتوى المشهد.
إليك مثالًا على مشهد كرة مكوّن من عقدة جذر RigidBody2D
باسم كرة Ball، والتي تسمح للكرة بالسقوط والارتداد على الجدران، وعقدة Sprite2D
، وعقدة CollisionShape2D
.
بمجرد حفظ أي مشهد سيعمل كنموذج أو قالب Template، أي يمكنك استنساخه في مَشاهد أخرى بقدر ما ترغب ونسمي عملية تكرار كائن من قالب كهذا باسم ** استنساخ Instancing **
وكما ذكرنا فيالدرس السابق، تتصرف المشاهد المُستنسخة كعقدة يخفي المحرر محتواها افتراضيًا. فسترى عند استنساخ الكرة عقدتها فقط، لاحظ أيضًا كيف أن لكل نسخة اسمًا فريدًا خاصًّا بها.
تبدأ كل نسخة من مشهد الكرة بنفس الهيكل والخصائص كملف ball.tscn
ومع ذلك، يمكنك تعديل كل منها بشكل مستقل، مثل تغيير كيفية ارتدادها، وزنها، أو أي خاصية يعرضها المشهد الأصلي.
التطبيق العملي
سنستخدم استنساخ المشاهد في تطبيق عملي لنرى كيف يعمل في جودو Godot. يمكنك تحميل مشروع الكرة الذي أعددناه لك من هنا instancing_starter.zip
استخرج الملف على حاسوبك. ولاستيراده، تحتاج إلى الوصول إلى مدير المشروع Project Manager. يمكن الوصول إليه عن طريق فتح جودو، أو إذا كان مفتوحًا بالفعل، انقر على "المشروع Project" ثم " العودة لقائمة المشاريع Quit to Project List" (Ctrl + Shift + Q, Ctrl + Option + Cmd + Q على macOS)
في مدير المشروع، انقر فوق زر "استيراد" Import لاستيراد المشروع
في النافذة المنبثقة التي تظهر، انقر فوق زر "تصفح" browse وانتقل إلى المجلد الذي استخرجته.
انقر نقرًا مزدوجًا على ملف project.godot
لفتحه.
وأخيرًا، انقر فوق زر "استيراد وتعديل" Import & Edit.
يحتوي المشروع على مشهدين محفوظين هما المشهد الرئيسي main.tscn
الذي يحتوي على الجدران التي تصطدم بها الكرة، ومشهد الكرة ball.tscn
. يجب أن يفتح المشهد الرئيسي تلقائيًا. وفي حال رأيت مشهدًا فارغًا ثلاثي الأبعاد بدلاً من المشهد الرئيسي فانقر على زر 2D في أعلى الشاشة.
لنضف كرة بصفة ابن للعقدة الرئيسية Main. من قائمة "المشهد" Scene، اختر العقدة Main، ثم انقر على أيقونة الرابط في أعلى القائمة. يسمح هذا الزر بإضافة نسخة من مشهد كابن للعقدة المختارة.
انقر نقرًا مزدوجًا على مشهد الكرة لإنشاء نسخة منه.
تظهر الكرة في الزاوية اليسرى أعلى نافذة العرض كما يلي:
انقر عليها واسحبها نحو المنتصف.
شغِّل اللعبة بالضغط على F5
(Cmd + B
على macOS) ويجب أن ترى الكرة وهي تسقط للأسفل.
نريد الآن إنشاء مزيد من النُسخ من عقدة الكرة.
بالمحافظة على الكرة محددة، اضغط على Ctrl + D
(Cmd + D
على macOS) لاستدعاء أمر النسخ. ثم انقر واسحب لنقل الكرة الجديدة إلى موقع مختلف.
يمكنك تكرار هذه العملية حتى تحصل على عدة كرات في المشهد.
شغِّل اللعبة مرة أخرى. يجب أن ترى الآن كل كرة تسقط بشكل مستقل الأخرى. هذا ما تفعله النُسخ، حيث أن كل نسخة هي إعادة تشكيل مستقل لمشهد حسب قالب معين.
تحرير المَشاهد والنُسخ
هناك المزيد من المميزات حول النُسخ. إذ يمكنك أيضًا:
-
تغيير خصائص إحدى الكرات دون التأثير على الأخرى باستخدام أمر "الفاحص" Inspector
-
تغيير الخصائص الافتراضية لكل كرة بفتح مشهد
ball.tscn
وإجراء تغيير على عقدة الكرة هناك وعند الحفظ، ستُحدّث قيم جميع نُسخ الكرة في المشروع.
اقتباسملاحظة: يتسبب تغيير الخاصية بكتابة قيم جديدة على المشهد المحزَّم packed scene الموافق.
لنجرب التالي: افتح ball.tscn
وحدد عقدة الكرة. ومن قائمة "الفاحص" Inspector على اليمين، انقر على خاصية PhysicsMaterial لاستعراضها.
اضبط خاصية Bounce إلى 0.5
بالنقر على مجال الأرقام أو كتابة 0.5
والضغط على Enter
شغِّل اللعبة بالضغط على F5
(Cmd + B
على macOS) ولاحظ كيف تترتّب الكرات الآن بشكل أكبر. حيث أن مشهد الكرة هو قالب لجميع النُسخ، ويُسبب إجراء التعديل والحفظ تحديث جميع النسخ وفقًا لذلك.
الآن، دعنا نعدِّل نسخة فردية من هذه النسخ.
انتقل مرة أخرى إلى المشهد الرئيسي بالنقر على التبويب المقابل فوق نافذة العرض.
حدد إحدى عقد الكرة المُستنسخة واضبط قيمة مقياس الجاذبية إلى 10
من قائمة "الفاحص" Inspector.
ستظهر أيقونة رمادية "revert" بجوار الخاصية المعدَّلة.
تُشير هذه الأيقونة إلى أنك تجاوزت قيمة من مشهد المصدر المحزَّم، وسيتم الاحتفاظ بالتجاوز في النسخة حتى إذا عدّلت الخاصية في المشهد الأصلي.
ستُستعاد الخاصية إلى قيمتها في المشهد المحفوظ، بالنقر على أيقونة revert.
أعِد تشغيل اللعبة ولاحظ كيف تسقط هذه الكرة الآن بسرعة أكبر من الكرات الأخرى.
ملاحظة: قد تلاحظ أنه لا يمكنك تغيير قيم PhysicsMaterial
للكرة. هذا يعود إلى أن PhysicsMaterial
هو مورد resource، والموارد هي مكونات أساسية أخرى في ألعاب محرك جودو، سنتحدث عنها في درس لاحق. ويجب عليك جعله فريدًا قبل أن تتمكن من تحريره في مشهد يرتبط بالمشهد الأصلي. ولجعل مورد ما فريدًا لحالة واحدة، انقر بالزر الأيمن عليه من قائمة "الفاحص" Inspector وانقر على "Make Unique" في القائمة التي تظهر لك.
حالات المشهد كلغة تصميم
تقدم نُسخ ومشاهد جودو لغة تصميم ممتازة، تجعله يبرز عن غيره، فمحرك جودو صّمّم منذ البداية ليناسب هذه الفكرة.
لست ملزمًا باتّباع أنماط الشيفرة المعمارية عند صنع ألعاب باستخدام جودو، مثل نموذج-عرض-تحكم (MVC) أو مخططات كيان-علاقة (Entity-Relationship) ويمكنك بدلاً من ذلك، البدء بتخيّل العناصر التي سيراها اللاعبون في لعبتك وبناء شيفرتك منها.
على سبيل المثال، يمكنك تقسيم لعبة إطلاق نار على النحو التالي:
يمكنك إنشاء مخطط مثل هذا لأي نوع من الألعاب تقريبًا حيث يُمثِّل كل مستطيل في الصورة السابقة كيانًا يظهر في اللعبة من وجهة نظر اللاعب، وتُخبرك الأسهم أي مشهد يمتلك مشهدًا آخر. بمجرد أن تضع مخطط لعبتك فيمكنك حينها إنشاء مشهد لكل عنصر مُدرج في هذا المخطط لتطوير لعبتك. ويمكنك الاستفادة من ميزة الاستنساخ لبناء شجرة مَشاهد، سواء بكتابة كود برمجي لإتشاء المشهد أو يمكنك إنشاؤه مباشرة في المحرر الرسومي لجودو.
غالبًا ما يقضي المبرمجون وقتًا طويلًا في تصميم هياكل معمارية مجردة ومحاولة تنسيق المكونات ضمنها، إلا أنّ التصميم بناءً على مشاهد اللعبة يجعل التطويرَ أسرع وأسهل، مما يسمح لك بالتركيز على منطق اللعبة نفسه. ونظرًا لأن معظم مكونات اللعبة تتطابق مباشرة مع مشهد ما، فإن استخدام التصميم المعتمد على المشهد يعني أن بإمكانك العمل على كل مشهد بشكل مستقل والتركيز على العلاقات بين المشاهد ودمج المشاهد الفرعية في المشاهد الرئيسية، وهذا يقلل من حجم الشيفرة البرمجية.
إليك مثالًا على مخطط المشهد للعبة عالم مفتوح بأصول كثيرة وعناصر متداخلة:
تخيل أننا بدأنا بإنشاء الغرفة، يُمكننا إنشاء عدة مَشاهد غرف مختلفة بترتيبات فريدة من الأثاث في كل منها، ويُمكننا في وقت لاحق إنشاء مشهد منزل يستخدم عدة نسخ غرف داخلية. وسنُنشئ قلعة من العديد من المنازل المُثبتة وأرضية كبيرة نضع عليها القلعة. وكل هذه ستكون حالات استنساخ لمشهد واحد أو أكثر.
وفي وقت لاحق، يُمكن إنشاء مَشاهد جديدة تُمثِّل حُراسًا وإضافتهم إلى القلعة. ستتم إضافتهم بشكل غير مباشر إلى عالم اللعب كاملًا، وبفضل هذه الميزة في محرك ألعاب جودو، سيكون من السهل عليك تحسين وتطوير لعبتك بطريقة سهلة ومنظمة إذ أن كل ما عليك فعله هو إنشاء واستنساخ المزيد من المَشاهد.
لقد صُمّم المحرر في جودو ليكون سهل الوصول من قبل المبرمجين والمصممين والفنانين على حد سواء، ويُمكن أن يشارك في عملية تطوير اللعبة فريق مؤلف من مصممي نمذجة ثنائية أو ثلاثية الأبعاد، ومصممي مستويات، ومصممي ألعاب، ومصممي رسوم متحركة، ويمكنهم أن يتعاونوا بكل مرونة ويعملوا جميعًا ضمن محرر جودو بطريقة سلسلة ومنظمة.
الخلاصة
تعرفنا في مقال اليوم على ميزة الاستنساخ التي يقصد بها عملية إنتاج نسخ من كائن ما في محرك ألعاب جودو ورأينا أن لهذه الميزة استخدامات عديدة. كما تعرفنا أكثر على المَشاهد التي تمنحك القدرة على تقسيم لعبتك إلى مكوِّنات قابلة لإعادة الاستخدام وتوفر لك أداة لبناء الأنظمة المعقدة كما توفر لك لغة رسومية تسهل عليك التفكير في هيكل مشروع اللعبة وتحسينها وتطويرها.
ترجمة - وبتصرف - لقسم Creating instances من توثيق جودو الرسمي.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.