اذهب إلى المحتوى

الرؤية التصميمية لمحرك اﻷلعاب جودو Godot


ابراهيم الخضور

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

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

التصميم والتأليف كائني التوجه

يتبنى محرك الألعاب جودو مفهوم التصميم كائني التوجه كأساس له من خلال نظام المشاهد المرن والتسلسل الهرمي للعقد. كما يحاول أن يبتعد عن اﻷنماط البرمجية البحتة كي يقدم طريقة واضحة ومباشرة لهيكلة ألعابك.

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

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

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

01 engine design

وتجدر الملاحظة أن جودو يقدّم أنواعًا مختلفة من الكائنات التي تُدعى عقدًا Nodes، ولكل منها غاية محددة. والعقد أجزاء من شجرة وترث دائمًا من العقدة اﻷب وصولًا إلى الصنف الرئيسي Node. وعلى الرغم من وجود عقد في جودو مثل اﻷشكال المتصادمة التي تستخدمها فيزيائية العقدة اﻷب، تُعد معظم العقد مستقلة عن بعضها. وبعبارة أخرى، لا تعمل العقد كما تعمل المكوّنات components في محركات ألعاب أخرى.

02 engine design nodes

فالعقد Sprite2D و Node2D و CanvasItem و Node، تمتلك جميع الخاصيات والميزات للأصناف اﻵباء كالتحويلات أو القدرة على رسم أشكال محددة وتصييرها باستخدام معالج لوني shader محدد.

حزم حصرية بالكامل

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

03 engine design tools

إن الغاية من ذلك كله تقديم حزمة متكاملة من اﻷدوات ﻹنشاء اﻷلعاب تحسين تجربة المستخدمين. بإمكانك بالطبع العمل مع برامج خارجية نظرًا لدعمه للإضافات plug-in، والتي تستطيع أن تنشئها بنفسك أيضًا!

ويعود وجود لغة GDScript الخاصة بجودو إلى هذا السبب جزئيًا إضافة إلى دعمه لغة #C. فلغة GDScript مصممة لتلائم حاجات المطورين والمصممين ومتكاملة تمامًا مع المحرّك والمحرر. وتتيح لك GDScript كتابة شيفرة اعتمادًا على صياغة اﻹزاحة أو المسافات البادئة indentation، وتتعرف على اﻷنواع، وتزودك بميزة اﻹكمال التلقائي. وتُعد هذه اللغة من لغات برمجة الألعاب وتوفر شيفرة سهلة ومفهومة وتضم أنواعًا مخصصة مثل Vectors و Colors.

ومع GDExtension يمكنك كتابة شيفرة عالية اﻷداء باستخدام لغات مصرّفة مثل C و ++C و Rust وبايثون (باستخدام Cython) دون إعادة تصريف المحرّك.

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

04 engine design fsm plugin

(محرر وهو إضافة على جودو 2 ويساعد على إدارة الحالة والانتقالات بصريًا)

محرّك مفتوح المصدر

يقدّم جودو قاعدة برمجية مفتوحة المصدر بالكامل وفق ترخيص MIT. ويعني ذلك أن كل التقنيات التي تأتي معه هي حرة أيضًا. وقد طوّرت معظم أجزاء المحرّك من الصفر من قبل مساهمين. ويمكن لأي شخص استخدام اﻹضافات المناسبة لمشروعه ولا يعني ذلك أن تُشحن هذه اﻹضافات مع المحرك. من اﻷمثلة عليها نجد Google AdMob أو FMOD. وأيًا منها يمكن أن يأتي على شكل إضافة مصدرها طرف آخر.

وتعني القاعدة البرمجية المفتوحة من ناحية أخرى أنه بإمكانك التعلم من محرّك الالعاب وتوسيعه كما تشاء، وتستطيع تنقيح اﻷلعاب بسهولة، إذ يطبع جودو رسائل الخطأ من خلال متتبع المكدّس stack tracer حتى لو اتت اﻷخطاء من المحرّك نفسه.

ملاحظة: لا يؤثر ذلك على العمل الذي تنفذّه على جودو إطلاقًا. فلن ترتبط أي قيمة نصيّة بالمحرّك أو أي شيء تفعله عليه.

محرّك يطوّره مجتمعه

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

محرر جودو هو في الواقع لعبة جودو

يعمل محرر جودو على محرّك اللعبة ويستخدم واجهة المحرّك الرسومية ويمكنه إعادة تحميل الشيفرة والمشاهد مباشرة عند اختبار مشروعك أو تشغيل شيفرة اللعبة ضمن المحرر. أي بإمكانك استخدام نفس الشيفرة في والمشاهد في ألعابك أو بناء إضافات وتوسيع المحرر.

ويعطي ذلك مصداقية ومرونة لواجهة المستخدم فهي تدعم المحرر ذاته. فعندما تستخدم التعليمة tool@ ستتمكن من تشغيل شيفرة اللعبة ضمن المحرر.

05 engine design rpg in a box

(محرر RPG in a Box هو محرر صمم باستخدام جودو 2 ويستخدم واجهة جودو الرسومية لمنظومته البرمجية المبنية على أساس العقد)

ضع التعليمة tool@ في بداية ملف GDScript وستعمل الشيفرة ضمن المحرر. يساعدك ذلك على إدراج وتصدير الإضافات وإنشاء إضافة مخصصة مثل محررات مخصصة للمراحل أو إنشاء سكربتات لها نفس العقد وترتبط بنفس الواجهة البرمجية التي تستخدمها في مشروعك.

ملاحظة: كُتب محرر جودو بالكامل باستخدام لغة ++C وصُرّف إلى الصيغة الثنائية. ويعني ذلك أنه من غير الممكن إدراجه كمشروع نمطي على شكل ملف project.godot.

محركان منفصلان ثنائي البعد وثلاثي البعد من جودو.

يوفّر جودو محركين مخصصين ثنائي وثلاثي البعد. وكنتيجة لذلك ستكون وحدة القياس اﻷساسية للمشهد ثنائي البعد هي البكسل. وعلى الرغم من أن المحركين منفصلين، يمكنك تصيير المشاهد ثنائي البعد في المحرّك ثلاثي البعد والعكس صحيح، كما يمكنك كذلك تضمين الشخصيات والواجهات ثنائية البعد في العالم ثلاثي اﻷبعاد.

الخلاصة

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

ترجمة -وبتصرف- لمقال: Godot's design philosophy

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...