المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [درس] عمل شخصية بالكامل فى الجيم ميكر



d.a.m.h
28-01-2008, 07:38 PM
السلام عليكم ورحمة الله وبركاته
منذ زمن بعيد لم اكتب دروس وذلك بسبب ظروف كثيرة...حسنا..احاول ان اعوض ما فاتنى واكتب درس
درس اليوم عن كيفية عمل حركات اساسية لشخصية مثل الجرى والقفز والاصطدام بالارضيات والحوائط
اسمع شخص يقول..وما الجديد فى هذا؟؟ كل مبتدىء فى الجيم ميكر يعلم هذه الاشياء..وهنا اقول نعم لكن...والاعضاء يعرضون العابهم لاحظت فى بعض الالعاب (واخص بالذكر العاب البلاتفورم)اخطاء فى التصادم منها اخطاء طفيفة لا تؤثر على اللعبة ومنها اخطاء فادحة...لذا فهذا الدرس قد يفيد بعض الاعضاء الذين يريدون ان يجعلوا امكانيات العابهم افضل واشرح من خلاله دوال التصادم الاساسية ووظائفها بالتفصيل.
حسنا....الان نبدأ الدرس
1-
اول ما سنفعله بعد فتح البرنامج هو ادخال السبرايتس الخاصة بالشخصية وقد اخترت فى المثال الذى ارفقته مع
الدرس صور سونيك وهو واقف,يجرى ويقفز
ملحوظة:
دائما حاول ان تسمى السبرايتس باسماء معبرة مثل spr_sonic_run او spr_sonic_stand
فهذا ينظم عملك بطريقة افضل
2-
قبل ان نفعل اى شىء علينا ان نضبط الBounding box..لكن ماهو الBounding box؟؟
http://img3.7m7.org/1-2008/fdgsdgs.lkjhef2j4fblj3w40037873.gif

اذا نظرنا الى هذه الصورة نجد ان هناك مربع تكون حول السبرايت وهذا المربع اختيارات هى Automatic , Full Image, Manual
ثم هناك احداثيات هى Left,Right,Top,Bottom
فكرة الBounding box هى انه يكون مربع يحول السبرايت وهذا المربع هو الذى يقوم بعملية الاصطدام
مع اى كائن فى اللعبة..انظر الى الصورة

http://img3.7m7.org/1-2008/fdgsdgs.lkjhef2j4fblj3w69876429.gif

هنا نرى ان صورة الدب اصطدمت بصورة الكرة من خلال هذه المربعات..لكن طبعا هذا المربع وهمى
فاذا اخترنا Automatic فان البرنامج سيقوم بوضع المربع حول السبرايت فقط
اما Full Image فانه سيجعلها على الصورة كاملة
لكن Manual عند اختيارها فانها ستنشط جزء الاحداثيات ومنها تضع القيم بيدك والتى تراها مناسبة
حسنا...الان عرفنا الBounding box لكننا لم نعرف بعد ما معنى ان نضبطه
ضبطه التى اقصدها هى ان تجعل كل القيم واحدة لكل السبرايتس...كيف؟؟
انظر هنا!!
http://img3.7m7.org/1-2008/fdgsdgs.lkjhef2j4fblj3w85549368.gif
ويجب ايضا ان تضبط الOrigin وتجعله متساو فى الثلاث صور وان تجعل ايضا الصور

http://img1.7m7.org/1-2008/fdgsdgs.lkjhef2j4fblj3w40934720.gif

من اسفل لها نفس الابعاد
وهذه هى الخطوة الاولى فى اصلاح التصادم الخاص بلعبتك
سنقوم بعد ذلك بادخال سبرايتس خاصة لعمل الارض وانا دائما اقوم برسم مربع ثم اقوم بتوزيعه فى الغرفة وبعدها اخفيه...ارسم انت ارضيتك المناسبة فهذا ليس موضوعنا الان.
ثم ابدأ بادخال الاوبجيكت الخاص بالاعب وليكن obj_sonic والاوبجكت الخاص بالارض ويسمى obj_land
اجعل الارضية solid من خلال المربع الموجود بعد فتح obj_land
الان سنبدأ العمل الجاد..لذا يجب التركيز
افتح obj_sonic واختر من قائمة الاحداث الحدث create
وبعدها اجذب Excute a peice of code الموجودة فى قائمة control
انظر هنا
http://img3.7m7.org/1-2008/fdgsdgs.lkjhef2j4fblj3w46542774.gif

افتحها واكتب فيها هذه المتغيرات



{

run=0


jump=0


}

ماهى هذه المتغيرات؟؟


المتغير run هو المتغير الخاص بالجرى فاذا كانت قيمته تساوى صفر


فهذا يعنى انه واقف اما اذا كان =1 اذا فالشخصية تجرى

jump هو متغير يعبر عن القفز فلو ان قيمته تساوى صفر يكون معناه ان

اللاعب ملامس للارضية (اى ثابت عليها سواء كان واقف اى run=0 او يجرى run=1 )





هنا دور الجاذبية...اذا لم تقم بوضع الجاذبية فى لعبتك فان اللاعب يظل معلقا اذا قفز
ومنها يأتى سؤال..هل الجاذبية مؤقتة ام دائمة...هل اذا قفزت انت فى مرة ستهبط على الارض وفى مرة اخرى ستظل معلق فى الهواء؟؟..الاجابة:الجاذبية دائمة واذا كان الحدث دائم فاننا نستعمل الحدث step
السؤال الاخر هو..متى تشعر بتأثير الجاذبية؟؟ دائما تشعر به وانت فى الهواء عندما تقفز اما عندما تنزل الى الارض فلا تشعر بها..فالجاذبية لا تجذبك ناحية الارض اذا كنت ملامس لها...اذا لعمل جاذبية فى الجيم ميكر نختار الحدث step
ونجذب excute a peice of code ثم نكتب داخلها هذا الكود



{


if place_free(x,y) {gravity=0.5} else {gravity=0}


if run=1 {sprite_index=spr_sonic_run;image_speed=0.5}

if run=0 && jump=0 && vspeed=0 {sprite_index=spr_sonic_stand}

if run=0 && jump=1 {sprite_index=spr_sonic_jump;image_speed=1}
if vspeed!=0 {sprite_index=spr_sonic_jump;image_speed=1}
}



ومعنى هذا الكود واضح..يعنى اذا كان المكان حر وغير مصطدم بشىء (ارضية او غيره)...وهذا المكان حددنا احداثياته بx,y حيث انهما قيمتين معروفين


للبرنامج تدل على احداثيات الكائن الذى تكتب فيه هذا الكود فان الجاذبية تكون مساوية 0.5 والا (اى اذا كان ملامس لأى شىء) فان الجاذبية ستكون مساوية لصفر.

الاكواد الخرى شرحتها من قبل لو لم تفهمها سأعيد شرحها مرة اخرى

الخطوة التالية هى عند حدث اصطدام اللاعب بالارضية..انظر هنا
http://img3.7m7.org/1-2008/fdgsdgs.lkjhef2j4fblj3w25924430.gif
نضع هذا الكود








{

move_contact_solid(direction,12)

if vspeed>0
{
jump=0
run=0
}
vspeed=0
}





معنى هذا الكود:

اذا اصطدمت بالارضية فان هناك اتصال سيحدث بين اللاعب والارضية الصلبة(وعرفنا كيف نجعل الارضية solid)






وهذا الاتصال يكون فى اتجاه direction (اى يكون فى الاتجاه الذى يتجه اليه اللاعب يعنى لو اللاعب يتجه يمينا فيكون الاتجاه لليمين وان كان لليسار

فالاتجاه لليسار)

اما القيمة 12 فهى تعبر عن القوة القصوى للتصادم وكلما زادت كلما كان الثبوت على الارض اكثر ونعطى مثال:







اذا ازدت قيمة الgravity وانقصت القيمة هذه فان التصادم سيكون به خلل حيث تجد انه قبل ان يلامس الارضية تبطأ سرعته الى

ان يستقر على الارض لذا حاول ان يكون هناك تناسب بين القيمتين

طبعا الكود التالى للتحكم فى المتغيرات حيث يجعل متغير القفز يساوى صفر فهذا معناه انه مستقر على الارض وايضا نجعل متغير الجرى مساوى لصفر ايضا
الكود الاخير vspeed=0 لابد منه والا ستجد ان اللاعب يستقر على الارض فترة قصيرة ثم يخترق الارضية
وينزل بسرعة كبيرة منها...لاحظ ايضا ان الكود يجب ان يكون بهذا الترتيب فلو انك عكسته سيسبب خلل فى التصادم..ممكن تجرب اذا شئت
الان عند الضغط على زر اليسار..انظر هنا
http://img3.7m7.org/1-2008/fdgsdgs.lkjhef2j4fblj3w18862574.gif
ضع الكود:





{

image_xscale=-1


if jump=0 then run=1

}


الكود الاول يجعل صورة الشخصية تنظر للاتجاه الاخر (وهذه نستعملها بدلا من ان نضع صروة للاعب وهو ينظر لليمين وصورة اخرى وهو ينظر لليسار)


الكود الثانى لتغيير قيمة متغر الجرى كما كتبت من قبل

الان الجزء المهم...الان وانت واقف ومستقر على الارض اسألك هل تستطيع التحرك ؟؟

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





{

if place_free(x-5,y) {x-=5}


}


حيث اننا يهمنا ان تكون المساحة خالية على بعد 5px من يساره لأنه سيتحرك جهة اليسار


ثم نكتب الكود x-=5 لكى يتحرك اى انه يتحرك فى حالة تحقق ذلك

وهذا الجزء الاول...اما الاخر فاذكره بمثال وهو مثال سوبر ماريو...عندما يقفز سوبر ماريو فانه يتحرك يمينا ويسارا وهو قافز

بشرط ان يكون هناك مساحات خالية على يساره و يمينه و اعلاه واسفله لذا نضيف هذا الكود:




{

if place_free(x-5,y-8) {x-=5;y-=8;move_contact_solid(270,12)}


}



ومعناه..اذا كانت المساحة خالية امام اللاعب على بعد 5pxمن يساره وعلى على بعد 8px من اعلاه فانه سيتحرك


فى اتجاه x مسافة 5 ناحية اليسار وفى اتجاه y لاعلى مسافة 8

وهذا الجزء الذى يهمله معظم الاعضاء فى العابهم

الان كما فعلت هذا لحدث ضغط زر اليسار افعله مع الحدث الخاص بضغط زر اليمين مع عكس القيم image_xscale,x
الان الجزء قبل الاخير
وهو كيفية القفز..نسألك متى تستطيع القفز؟؟ والجواب يكون عندما تكون ملامس الارضية
فانت لا تستطيع القفز وانت فى الهواء لأن الجاذبية تؤثر عليك وتعوق اتجاهك لأعلى...لذا فى الحدث الخاص بضغط زر القفز اكتب هذا الكود





{

if place_metting(x,y+1,obj_land)


{

jump=1

run=0
vspeed=-10
}
}




ومعناه..اذا كان اللاعب ملامس للارضية سواء على يمينه او يساره او اسفله بمقداار 1px فسيكون هناك قفز


وطبعا غير قيم المتغيرات اياها واجعله يقفز عن طريق كتابة vspeed= وقيمتها تكون سالبة

يبقى شىء صغير لننتقل لاخر نقطة وهو عندما ترفع يدك عن زر اليسار فان اللاعب يتوقف ...يجب عليك ان تغير صورته وانظر هذه الجزئية فى مثالى

الان الجزء الاخير:
وهو هل سيكون التصادم ممتاز ولا عيوب به؟؟
هنا اقول لك حتى الان تقريبا لا..لكن بخطوة صغيرة سيصبح تمام باذن الله.كيف؟؟
سندخل صورة اخرى صغيرة عبارة عن مربع بلون مخالف للارضية او مثلها اذا اردت ونضيف الاوبجيكت ونختاره
وسنسميه obj_border
انظر الصور
http://img3.7m7.org/1-2008/fdgsdgs.lkjhef2j4fblj3w17422645.gif







http://img3.7m7.org/1-2008/fdgsdgs.lkjhef2j4fblj3w23481573.gif




بعد ان ادخلته اجعله مطابق ل obj_land من خلال parent كما فى الصورة

وضعها على الحواف كما فى الصورة

http://img3.7m7.org/1-2008/fdgsdgs.lkjhef2j4fblj3w33832119.gif
وبهذا يكون التصادم كامل ومتقن....المثال موجود بالمرفقات كتطبيق لهذا الدرس المطول
ارجو ان اكون وفقت فى الشرح وان يستفيد كل عضو من هذا الدرس الطويل...فى انتظار اى استفسار او سؤال...وتطبيق هذا الدرس موجود بالمرفقات
والسلام عليكم

XORO
28-01-2008, 07:50 PM
انا اشهد انك اكثرنا معرفة بالجيم ميكر

ودرسك هذا دليل على كلامي

درس مفيد جدا سواء للمبتدئين او المحترفين

شكرا لك اخي على هذا المجهود

d.a.m.h
29-01-2008, 01:26 AM
انا اشهد انك اكثرنا معرفة بالجيم ميكر

ودرسك هذا دليل على كلامي

درس مفيد جدا سواء للمبتدئين او المحترفين

شكرا لك اخي على هذا المجهود
العفو اخى العزيز...وهذا المثال اضعه على المدى الطويل فقد لا يستفيد منه احد فى الوقت الحالى لكن فى يوم ما سوف يحتاج اليه اى عضو فى بدايته مع الجيم ميكر..وشكرا على الرد المشجع

kakarot
29-01-2008, 07:55 AM
الله يجزيك الخير
صراحة أبصم إنك خبير
إن شاء الله أستفيد من الدرس ^^
مشكوور

PrinceOfSorrow
29-01-2008, 12:21 PM
وعليكم السلام ورحمة الله وبركاته

دخلت الدرس ولم اكن اعرف انني مازلت جاهلا امام خبرتك في تصادم في جيم ميكر
بصراحة غطيت على الماسك وتعلمت منك الكثير
بارك الله فيك وعلى هذا الدرس رائع

تم ترشيح وجاري تطبيق هذه خاصية في لعبتي Masked Dragoon ماشاء الله
ستكون لعبة حصاد الذي تعلمته من مهاراتكم ^^

Thanks A Lot

d.a.m.h
29-01-2008, 10:36 PM
kakarot== العفو....وباذن الله ارى منك لعبة جيدة
Prince of sorrow== شكرا على ردك وباذن الله ارى الديمو قريبا جدا

من التراب
31-01-2008, 01:50 AM
ما شاء الله عليك
الصراحة الدرس كان مشوق للكل مبتدئين ومحترفين
والكل إستفاد
---
عجبني إستخدامك للكود بدل الأيقونات <<<< يسهل صياغت الدرس ويقلل الصور ^.^
تسلم على الدرس المطول وفي ميزان حسناتك
حمستني أكتب دروس في القيم ميكر ^..^

بالتوفيق

الرجل القط
31-01-2008, 02:29 AM
شكرالى على الدرس المفيد

Prince Of Pain
11-02-2008, 11:49 PM
مشكوووووووووووووووووور عالدرسسسسسسسسسسسسس الحلووووووووووووو

The_source
12-02-2008, 08:16 AM
بسم الله ماشـــــــــــاء الله على الشرح المميز هذا أخي.............أستمر بهذا الأسلوب الجميل

يوسف ايمن محمد
04-12-2008, 09:38 AM
الموضوع جيد لكن الصور غير ظاهرة

Karim Ghazal
04-12-2008, 09:48 PM
الموضوع جيد لكن الصور غير ظاهرة


أخي العزيز يُمنع الرد على المواضيع القديمة ( ألتي تجاوزت ال 3 أشهر ) ..


مُخالف = قفل