لكل مجال مصطلحات ومفاهيم خاصة به، ومجال تطوير الألعاب ليس استثناء، فيوجد العديد من الكلمات التي يجب على مطور الألعاب معرفة معناها مثل محرك العاب و البرمجة كائنية التوجه ومُعدل التكرار.
كما توجد هذه المفاهيم والمصطلحات في كل محركات الالعاب، توجد لانها الاساس الذي يكون اللعبة من الناحية التقنية، ويُمكن تقسيم تلك المفاهيم الى 3 اقسام اساسية
- البرمجة كائنية التوجه OOP
- مكتبة الرسوميات Graphics APIs
- دورة المعالجة Game Loop
وبما أن كلها تتواجد في محركات الالعاب، فيجب الإجابة عن السؤال الاهم. فما هو محرك الالعاب؟
عناصر المقال
محرك الألعاب
هو برنامج يوفر مجموعة من الأدوات والمكتبات والوظائف التي يمكن للمطورين استخدامها لإنشاء ألعاب الفيديو. يوفر المحرك البنية التحتية الأساسية لتشغيل اللعبة، بما في ذلك الرسومات والصوت والحسابات الفيزيائية.
يسمى مُحرك الألعاب بهذا الاسم لأنه يوفر القوة المحركة لتشغيل اللعبة. فهو يوفر البنية التحتية الأساسية التي تحتاجها اللعبة للعمل على الاجهزة المختلفة (حاسوب وهواتف وغيرها) وتشغيل ـ أو قل تحريك ـ اللالعاب فيها.
يختلف محرك الألعاب عن مكتبات البرمجة في توفير الأدوات الخاصة بالتطوير واضافة مجموعة متنوعة من المكتبات الاخرى بداخله مثل مكتبة الرسوميات والفيزياء، فإن كنت تستعمل مكتبة عادية، ستحتاج لكتابة الكثير من التعليمات البرمجية التي تغنيك عنها المحركات.
كما يهدف المحرك للعمل على 3 مهام اساسية, وهي بدء اللعبة، تشغيلها عن طريق دورة المعالجة واخيرا إغلاقها.
الكائنات Objects
بل قل البرمجة كائنية التوجه.
كل ما بداخل ألعاب الفيديو يُسمى بالكائنات، فاللاعب كائن والعدو كائن والشجرة كائن، حتى النص الذي يعرض نقاط اللاعب score يسمى ايضا كائن.
بل هناك كائنات تتكون من كائنات اخرى، فمثلا اللاعب يتكون من كائن الصورة sprite ــ الذي يعرض صورة اللاعب ــ وكائن التصادم collision ــ المسؤول عن معلومات التصادم ــ وربما يوجد كائن المؤقت المسؤول عن متى يمكن للاعب استعمال قدراته أو سلاحه مرة اخرى.
على هذا الأساس، فإن لكل كائن خصائص يختص بها فقط، فلن تجد خواص الكتابة في كائن الصورة، ولن تجد خواص عرض الصور في كائن النصوص، وايضا لن تجد الخصائص الفيزيائية إلا في الكائنات المتعلقة بذلك.
وتسمى كائنات بسبب استخدام “البرمجة كائنية التوجه” Object-oriented programming، ويرمز لها بـ oop، فهي تعمل باستخدام الاصناف class وتوفر ميزات الوراثة وغيرها.
الوراثة Inheritance
والآن يُطرح سؤال “لماذا؟” نفسه، فلما يوجد نظام الكائنات من الأساس في مجال تطوير الألعاب.
ذلك يرجع لتوجه يتعلق بالبرمجة، وهو ما يسمى بالـبرمجة كائنية التوجه Object-oriented programming وتُختصر بـ oop، هذا التوجه يعمل على أساس الأصناف classes، حيث يُمكن توليد كائن جديد يحمل صفات كائن قديم ويُضاف له صفات جديدة.
الصفات هنا تعني الدوال، أي اذا قيل أن لكل كائن صفات خاصة به، ذلك يعني أن له دوال خاصة به، مثل دالة مسؤولة عن إرجاع الاتجاه الذي من المفترض أن يتحرك له الكائن بعدما تلامس مع كائن أخر (بحساب السرعة والقوة وغيرها).
فنقول عليه كائن فيزيائي، ومن ثم نقوم بتوريث هذه الصفات/دوال الى كائن جديد، ونضيف اليه دوال جديدة، فنقوم مثلا بإنشاء كائن به دوال الجاذبية، وأخر لا يوجد به تلك الدوال.
والأهم من ذلك كله، هو امكانية التعديل على الكائنات الاصلية فقط، وتتعدل بقية الـأطفال ــ أي الكائنات التي ورثت من الكائن الأصلي ــ فيكون التعديل على اللعبة ككل امرا سهلا.
تكوين اللاعب والعدو
وعلى أساس الكائنات والوراثة، يمكن إنشاء كائن به مجموعة كائنات اخرى متداخلة، فمثلا نقوم بإنشاء كائن مختص بالحركة، ونضيف اليه كائن مختص بالصورة, بالاضافة الى كائن مختص بالصحة health، وكائن أخر يختص بتلقي الهجمات.
بعد اضافة كل تلك الكائنات لبعضها البعض، هكذا تكون قد انشأت كائن “الشخصية”، فيمكنك استعماله لعمل اللاعب ولعمل العدو في نفس الوقت.
بل يمكنك استخدامه لعمل اكثر من عدو باشكال مختلفة و بمتغيرات مختلفة (واحد قوي والثاني ضعيف، واحد طويل وأخر قصير).
مكتبة الرسوميات Graphics APIs
وهي مجموعة من الدوال المسؤولة عن عرض اللعبة على الشاشة في الوقت اللحظي، اي اثناء عمل اللعبة. فتقوم برسم كل نقطة على شاشة المستخدم في كل اطار (60 إطار في الثانية )
وذلك يكون عن طريق معادلات تتعامل مع وحدة المعالجة الرسومية gpu، فلا يحتاج المطور لفعلها بنفسه.
في الوقت الحالي يوجد 4 مكتبات رسومية اساسية، هي الاشهر استخداماً في محركات الألعاب هذه الأيام، وهم [opengl – directx 11 – vulkan – directx 12].
كلاً منها لديه مميزاته، ولكن directx يعمل فقط على اجهزة شركة مايكروسوفت، اي نظام ويندوز واجهزة إكس بوكس، غير ذلك فبقية المكتبات تعمل بكفائة مع جميع الأجهزة الرسومية تقريبا.
يقوم محرك الألعاب بإعطاء المكتبة المعلومات التي من المفترض عرضها على شاشة/واجهة المستخدم، فتقوم تلك المكتبات اما بتوقع او حساب الاطارات الجديدة في اللعبة ومن ثم رسم كل نقطة على الشاشة.
عندما يتحرك اللاعب، فما يحصل بالفعل هو أن مكتبة الرسوميات تقوم بعرض 60 لقطة مختلفة في الثانية الواحدة، وفي كل مرة ترسم فيها اللقطة، يكون اللاعب في مكان مختلف بفروقات بسيطة.
فيكون في الموضع 0 ثم 5 ثم 10 ثم 15 وهكذا، بهذه الطريقة يُوهم المستخدم بالحركة، فيشعر أن الشخصية والكائنات التي امامه تتحرك بالفعل وليست مجرد صور ثابتة.
لهذا تقوم المكتبات باعادة رسم الشاشة 60 مرة في الثانية الواحدة، فكلما زاد الرقم كانت الحركة أكثر سلاسة.
دورة المعالجة Game Loop
هي اساس محركات الالعاب، هي الوظيفة الاساسية لاي محرك العاب، وهو المفهوم الأهم بين البقية، ان كان هناك سبب رئيسي لكتابة هذا المقال فذلك يرجع لعرض وشرح هذا المفهوم.
محرك الألعاب مسؤول عن 3 حالات للعبة، بدئها، تشغيل، والإغلاق. والتشغيل هو ما يسمى بدورة المعالجة game loop. تعمل دورة المعالجة على أداء 3 مهام رئيسية، وهي :
- معالجة المدخلات
وهو التحقق من مدخلات المستخدم، مثل ضغطات لوحة المفاتيح أو حركات الماوس، وتحديث حالة اللعبة وفقًا لذلك. - تحديث اللعبة
أي تحديث مواقع جميع الكائنات في اللعبة والتحقق من حدوث تصادمات وتطبيق أي تغييرات على اللعبة. - عرض رسوميات اللعبة
يتضمن ذلك رسم عالم اللعبة وجميع الكائنات الموجودة فيه على الشاشة باستخدام مكتبة الرسوميات.
وتسمى دورة لأنها تعمل بعدد إطارات اللعبة، فلو كان هنالك 60 إطار في الثانية فتقام هذه العملية بـ 60 مرة في الثانية، وتسمى معالجة لأنها تقوم بمعالجة او حساب الكثير من العمليات المختلفة ــ المذكورة أعلاه.
بدون دورة المعالجة لن تتواجد العاب الفيديو، فكل مهمة لها دور لا يُستغناء عنه، فمثلا لا يمكن أن تجد لعبة لا تتفاعل معها بالمدخلات، سواء الضغط على المفاتيح او لمس شاشة الهاتف.
وكل محركات الألعاب بها دوال تختص بدورة المعاجلة، هكذا يمكنك كتابة التعليمات code خاصتك داخلها، فتجعل اللاعب يتحرك والكرات ترتد وغيرها من التفاعلات والحركات بشكل عام.
الكثير من المفاهيم الأخرى
يمكن القول انه يوجد مفاهيم اخرى داخل محركات الألعاب مثل مكتبات الاصوات التي تعالج الصوتيات وتخرجها في أفضل “شكل” ممكن للمستخدم، وايضا مفهوم المدخلات الذي ذكرت القليل عنه ومدى تأثيره على اللعبة.
لكني فضلت ذكر أهم المفاهيم التي يتعامل معها المطور بشكل يومي دون ملاحظته. بهذه الطريقة يفهم محرك الألعاب خاصته ويفهم بُنيته، بل ربما ذلك يساعده أيضا في فهم أسباب المشاكل التي تقابله.
كلما تعرفت أكثر على هذه المفاهيم زاد وعيك حول كيفية إنشاء لعبة سليمة تقنيا، وتخلو من الأخطاء التي قد تسبب مشاكل لاجهزة الحاسوب عند المستخدم او لا تعمل من الاساس.
أخبرني برأيك حول هذه المفاهيم في التعليقات، وشاركني معلوماتك حول تلك التي لم اتحدث عنها، فعالم تطوير الألعاب والمحركات مليئ دائما بتقنيات ومفاهيم جديدة
للأسف المقال ملئ بالأخطاء العلمية بالإضافة لماذا لم تتكلم عن مكتبة metal
علمي بمكتبة metal قليل، وسمعت عنها فقط منك، فهلا وضحت لي ولبقية الزوار ما هي، حتى يستفاد جميعنا بالمعلومة، فقد حاولت البحث عنها ولم اجد شيئا.
بالنسبة للاخطاء العلمية، هلا وضحت لي ما هي، ساكون مسرورا بتعديلها في المقال.