بسم الله الرحمن الرحيم
اليوم اتكلم عن درس جديد يهم مستعملى الجيم ميكر وبالتحديد محبى تصنيع العاب البلاتفورم.
دائما ما نجد العاب البلاتفورم التى نصنعها نمطية حيث اللاعب يسير فى اتجاه واحد على ارضية مستوية ويقفز من فوق حفر وعوائق ثم يقابل الوحش.
السؤال هنا : لماذا نجعل ارضيتنا مستوية دائما ولا نجعلها ذات تضاريس من مرتفعات ومنخفضات مثل لعبة Sonic الشهيرة؟؟ فهذا على الاقل يعطى نوع من الواقعية على اللعبة.
لنبدأ بعمل شكل جديد لألعاب البلاتفورم عندنا...ولنشرح طريقة عمل تضاريس يتحرك عليها اللاعب.
الفكرة المستخدمة:
اذا نظرنا الى هذه الصورة:
قيمتى snapX و snapY هى قيم تحدد اقل مسافة ممكنة تفصل بين اثنين objects فى غرفة واحدة
انظر الى هذه الصورة
لذا فان هناك نوع من التقييد لمصمم اللعبة عندما يرغب فى وضع objects بينها مسافة صغيرة جدا
اول شىء سنفعله هو وضع قيمتى snapX و snapY بواحد كما بالشكل
ضع الobject الخاصة بالارضية ولتكن obj_land
وادخل ايضا صور اللاعب واجعل الBounding Box متساوى وكذلك نقطة الOrigin
انظر الى هذا الدرس اذا لم تكن تعرف كيف تضبطها
الخطوة الثانية هى ان تزيل علامة صح من على هذا المربع
.....لكن ما معنى هذا المربع؟؟
قلت فى درسى السابق ان الBounding Box الموجود حول الobject هو الذى يحدث التصادم لكن فى حالة ان تضع علامة صح على هذا المربع فان التصادم سيكون بين اخر جزء من البيكسل الخاص بالصورتين....انظر الى هذه الصورة لتفهم
اما اذا ازلت علامة صح من المربع المشار اليه فان التصادم سيصبح بين المربعين كما بالشكل
وهذه النقطة لم انبه لها فى درسى السابق والسبب انه عندما تختار الBounding Box ان يكون Automatic
فانه يقوم بتغليف الصورة حتى اخر جزء من البيكسل...انظر هنا
وعموما هذه الطريقة مفضلة اكثر لأنها من جهة تضبط التصادم وتجعله اكثر اتقانا كما انها تقلل من حجم الذاكرة المستخدمة كما يقول ملف المساعدة الخاص بالبرنامج.....ارجو ان تكون الفكرة واضحة.....نعود الى موضوعنا
الان ضع الخلفية الخاصة باللعبة والتى تحتوى على مرتفعات ومنخفضات وضعها داخل الroom
ثم ابدأ فى وضع obj_land داخل الroom وحاول ان تضعها على الخلفية مع مراعاة تضاريس الخلفية ويفضل استعمال زر Shift مع الضغط على الزر الايسر من الماوس
انظر الى الصورة
لاتنس جعل obj_land solidتمام باذن الله
الان ضع obj_player بعد ان تعلمنا عملها بالكامل فى الدرس السابق لكن هنا سنقوم بتغيير قيم صغيرة حتى يكون التصادم متقن اكثر فمثلا فى حالة القفز نضع الكود
اما الباقى فهو كما تعلمناه من قبلكود:{ if !place_meeting(x,y+8) then vspeed=-10 }
الان نجرب نتيجة العمل!!
حسنا قبل ان انهى الدرس لى بعض الملحوظات احب ان انوه عنها:
اولا: حاول بقدر الامكان ان يكون ترتيب obj_land داخل المرحلة منسق ومستوى
انظر الصورة هنا
وهذا لا يحدث خلل فى حركة الشخصية
ثانيا: اجعل sprite الخاصة بobj_land صغيرة لأنك ستملأ الغرفة بها فاذا كانت ابعاد صورتها كبيرة قد تبطأ اللعبة
انا افضلها 16X16 او 8X8
ثالثا: الطريقة متعبة قليلا؟؟!!...كلما تعبت اكثر كلما زادت لعبتك نجاحا
ارجو ان يكون الدرس مفيد ونجد العاب بلاتفورم بامكانيات افضل
اسف على الاطالة.....الملف بالمرفقات للتطبيق...اترككم الان لأنى كنت فى العمل من الثامنة صباحا الى التاسعة مساءا ولا أرى امامى حاليا....
والسلام عليكم ورحمة الله وبركاته