بعض الاساسيات بلغة الجيم ميكر GML .
صفحة 1 من اصل 1 • شاطر
بعض الاساسيات بلغة الجيم ميكر GML .
GML هي اللغة المستخدمة بالجيم ميكر. بها الكثير من الاوامر و المتغيرات التي تساعد على تصميم الالعاب بسهولة و مرونة اكثر. و يمكنك التحكم بجميع خصائص اللعبة ايضاً. الهدف من هذا الموضوع هو جعلك قادرا على تصميم اكوادك الخاصة و ليس نسخها من هنا وهناك. ستكتشف بعد فترة من الزمن وبعد متابعة الدروس القادمة انه بإمكانك الاستمرار لوحدك و الدخول بالاوامر الاكثر تعقيداً من غير الحاجة للعوده إلى هنا.
ولكن لماذا نستخدم اللغة بالرغم من وجود بعض ايقونات الاوامر ؟
لعدة اسباب وأهمها على حسب اعتقادي.
- سهولة كتابة الاوامر و تصميم الحركات التي تريدها ( بعد ان تعتاد على الاوامر).
- السرعة في تتبع الاخطاء و سهولة متابعة الاوامر بالكود الواحد وفهم ما بالكود بنظرة واحدة.
- وجود اوامر اكثر باللغة عن التي هي موجوده بالايقونات.
- سهولة نقل الاكواد من اوبجيكت لاخر عن طريق ( النسخ و اللصق).
- سيكون بداية انطلاقك إلى عالم البرمجة الحقيقة بسبب التشابة الكبير بينهما.
لمذا اصبحت اللغة GML اسهل من السابق؟
- وجود كتاب المساعدة الذي يحتوي على جميع الاوامر و قواعدها. مع الامثلة للبعض.
- تقوم واجهة البرنامج بتلوين النص على حسب نوع الكلمه المستخدمة .
- وجود كاتب سريع يتتبع الاوامر و يساعدك في اختصار كتابتها في اسفل واجهة البرنامج.
أين ابداء البرمجة بالجيم ميكر؟
البرمجة تكون لشيئين. الاول هو الاوبجيكت Object والثاني هو الروم Room.
في حالة كتابة الكود للروم فانه عليك دخول الي خصائص الروم المطلوب ثم الدخول الي الاعدادات Settings. ستجد زر صنع الاكود Create Code . اضغط علية لتتمكن من البدء بالبرمجة فيه.
في حالة كتابة الكود للاوبجيكت فهناك مكانين:
الاول هو قطعة من الكود Piece of Code: يمكنك ضعها في الحدث event المناسب وبداء كتابة اوامر البرمجة بها.
الاثاني هو السكريبت Script : يمكنك كتابة اوامر البرمجة بها و ستكون محفوظة مع المصادرResources وعند الانتهاء يمكنك وضعها بأي اوبجيكن و بأي حدث.
المتغيرات
في البداية, يجب معرفة ان المتغيرات هي حاويات لقيم عددية او احرف. او بالاحرى المتغيرات هي عناوين لمواقع في ذاكره الكمبيوتر تحوي قيم معينه. و الجدير بالذكر ان متغيرات الجيم ميكر تنقسم إلى ثلاثة اقسام.
القسم الاول : المتغيرات العالمية Global Variables
وهي متغيرات لا يمكن تغير محتواها و لكن يمكن الاستفاده منها. وغالبا ما تكون هذي المتغيرات تفيدك بمعلومات عن جهازك. او عن اللعبة نفسها. و خير مثال هو الامر التالي
mouse_x هذا الامر يعطيك موقع مؤشر الفاره على حسب موقعها من واجهة اللعبة
وايضاً
current_minute فهذا المتغير يعطيك عدد الدقائق على حسب ساعة جهازك.
القسم الثاني: متغيرات الاوبجيكت Objects Variables
وهي متغيرات تكون موجوده افتراضيا مباشرةً بعد وضع اوبجيكت في الروم. ومن اهمها
x و y حيث انهما يدلان على موقع الاوبجيكت في الروم
القسم الثالث : المتغيرات الخاصة بك
وهي متغيرات انت تقوم بتحديدها لغرض ما باللعبةز عادةً تكون اما عداد لشيء ما او مؤقت لغرض معين. و مثال عليها
money= 0 و هو متغير قمت انا بوضعه و هو غير معروف للجيم ميكر و جعلت قيمته صفر. واريد ان استخدمه كعداد للنقود التي ساجمعها باللعبة.
لا تنسى ان تسمية متغيراتك الخاصة لها شروط
- ان لا تتعدى 64 حرف
- ان تبداء بحرف
- ان تستخدم حروف او ارقام او خط السفلي ( _ ) فقط !
- يكون باللغة الانجليزية و يجب ان تنتبه للحروف الكبيرة و الصغيره.
المعادلات
قبل البدء بالمعادلات. يجب معرفة بعض الاساسيات. اهمها تعريب المتغير ووضع
قيمة له. ونحن تنحدث عن متغيرات الاوبجيك او المتغيرات الخاصة بك. ويتم
ذلك عن طريق التالي:
في الحدث Create لكل اوبجيكت يجب تسمية المتغيرات و ووضع قيمه لها. ومثال
على ذلك لو كنت تريد صنع بطل له سلاح به عدد 10 من الطلقات و طاقته تساوي
100 و له 3 ارواح. فيكون كالتالي:
- الكود:
weapon =10;
health= 100;
live = 3;
نلاحظ وجود فاصلة منقوطه في نهاية كل سطر. لندل البرنامج على نهاية السطر او المعادلة.
أثناء اللعب. تحث بعد التغيرات في القيم. وذلك من خلال عمليات حسابية بسيطة و اهمها:
الجمع
الطرح -
الضرب *
القسمة /
علينا معرفة كيف استخدام هذه الادوات البسيطه. مثلاً لو اردنا ان ننقص عدد
الطلقات للسلاح بمقدار (واحد) عن كل طلقة يقوم اللاعب بها فماذا نفعل ؟ في
المثال الاول اعطينا المتغير قيمه ثابته و هي 10. ولكن الان نحتاج الي
معادلة تساعدنا على انقاص قيمة الطلقات بمقدار (واحد) لكل طلقة دون الحاجه
لمعرفة كم طلقة موجوده عندنا حالياً.ويتم ذلك بأحد الطرق التالية:
كود:
- الكود:
weapon -= 1;
كود:
- الكود:
weapon = weapon -1
بالمتغير weapon و انقاص منها بالقيمة الموجوده بعد الاشارة يساوي. وهي في
مثالنا تساوي (واحد).
الطريقة الثانية هي ابسط للمبتدئين.حيث انك تستطيع ان ترى ما هي القيم
المتوفره و كم الناتج الذي سيخرج لك في المتغير weapon. فلو كان المتغير
يساوي (7) فان المعادلة تصبح
كود:
- الكود:
weapon = 7 - 1;
يمكن تطبيق هذه الطريقتان لكل من الادوات الحسابية المتوفره. علماً بان
هناك المزيد. ولكن كمبتدئين, هذا يفي بالغرض. وهنا بعض الامثلة لاستخدام
المعادلات البسيطة.
كود:
- الكود:
{
score = 100*5;
live = live 1;
speed /= 100 (score*live);
}
الادوات الشرطية
اعتبرها شخصياً اهم جزء بالبرمجة. لو تتقنها بشكل ممتاز سيسهل التعامل مع جميع المتطلبات الاخرى. هناك عدة ادوات ومن اهمها:
If و Else
While
Do و Until
سنتكلم بهذه الفقرة عن الادات If والتي تعني بالعربية " إذا ". فكيف يكون
استخدامها؟ على حسب الشكل التالي يمكنك كتابة الادات في ابسط صورة:
كود:
- الكود:
{
if ()
}
ولتسهيل فهم الطريقة نحاول ان نعطي عبارة يفهمها الانسان ونحولها إلى لغة
بسيطة للجهاز ليقوم هو لاحقاً بتحويلها إلى لغة الالة. فنقول:
لو كان عندنا شخصية تجمع التفاح في احد الالعاب. فلو جمع 100 تفاحة فانك
تسمع صوت يعلمك بذلك. و بطريقة اخرى , انه " إذا " كان عدد التفاحات يساوي
100 " فأنه " يسمع صوت معين.
لا حظ ان " إذا " هي الادات الشرطية IF و "التفاحات يساوي 100" هي
المعادلة الشرطية و " فأنه " هي عبارة عن بداية الناتج و تكتب Then. كما
بالكود التالي:
- الكود:
{
If (apples == 100) Then
sound_play(sound01);
}
المعادلة. ولو تلاحظ أننا وضعنا اشارتين يساوي فهذي تدل على ان المعادلة
موجودة للمقارنه بين قيمتين. فكانت المقارنه هي هل عدد التفاحات يساوي
العدد 100.
ماذا لو اردنا ان يحدث عدد من الاشياء بعد اكتمال الشرط ؟ مثال على ذلك. بعد جمع 100 تفاحة فانه:
1 - تسمع صوت
2 - يصبح حدد التفاحات يساوي صفر
3 - يزداد عدد الارواح بمقدار 1
تقوم الادات IF بقراءة السطر الذي يليها مباشرة لو كانت الاجابة صحيحة
True و يقوم بتجاوزها و الانتقال للجملة التي بعدها لو كانت خاطئة False.
ولكن بستخدام الاقواس {} فاننا نحدد للادات اي مجموعة من الاسطر التي يجب
قرائتها إذا كانت الاجابة صحيحة.
هنا مثال على شاكلة السابق يبين ما يحدث بالتفصيل. عند اخذ اي تفاحة فان
النقاط Score تزيد بمقدار 100. ونسمع صوت Sound01 يدل على اخذ التفاحة
ويزيد عدد التفاح بمقدار واحد. ولكن لو اصبح عدد التفاح يساوي 100 فان
اشياء اضافية تحدث مثل صوت اخر Sound02 يدل على بلوغ ال100 تفاحة و يصبح
عدد التفاح apples يساوي صفر. و الارواح lives تزيد بمقدار واحد.
في الحدث Collision للتصادم بين اللاعب و التفاحة نضع هذا الكود.
كود:
- الكود:
{
score = score 100;
apples = apples 1;
sound_play(Sound01);
if (apples ==100) then
{
sound_play(Sound02);
apples = 0;
lives = lives 1;
}
}
لا اريدك ان تنسى ان ادات المقارنه ليست فقط يساوي انما هناك اشارات اخرى
مثل " اكبر من " > او " اصغر من او يساوي" <= و العديد منها: كما
بالتالي :
< <= == != > >=
هذه الفقرة عبارة عن خلاصة لاستخدامات الادات IF حيث هناك اسرار و اساليب
كثيره لاستخدامها. و لا يمكن تصميم لعبة من غير هذه الادات. سنقوم بمراجعة
الاستخدامات الاخرى للادوات الشرطية حيث انني لم اتعمق بالموضوع لجعله
بابسط صوره.
الدوال Functions
الدوال هي عبارة عن اوامر مبنية بلغة الجيم ميكر لتساعدك على اختصار بعض
العمليات المطلوبة لبرمجة الالعاب. واحب ان اقسم انواع الدوال في الجيم
ميكر إلى ثلاثة انواع. و قبل البدء اود ان اوضح ان شكل الدالة هو عبارة عن
أمر يلية قوسين كما بالمثال التالي:
كود:
- الكود:
sound_play(sound01);
النوع الاول: هي الدالة التي تقوم بوظيفة معينة من غير الحاجة إلى ادخال معطيات بها. ومثالها
كود:
- الكود:
instance_destroy();
النوع الثاني: هي الدالة التي ندخل بها بعض البيانات لتقوم بوظيفة معينه.
ويجب ان تكون البيانات مقبولة من قبل الدالة لتفادي الأخطاء ومثالها:
كود:
- الكود:
sleep(numb);
النوع الثالث: هو النوع الذي يقوم بارجاع معلومات لك والمعروف بكلمة
Return. وهي من اهم الانواع لكفائتها بختصار البرمجة بشكل عام. ستلاحظ ذلك
بعد قيامك بتصميم لعبتك لاحقاً. ومثال ذلك:
كود:
- الكود:
instance_create(x,y,obj);
معطيات و هي الموقع بالطول X و الموقع بالعرض Y و اسم الاوبجيكت. ( على
حسب تسميتك له ). ولكن اين القيمة العائدة وما هي ؟ القيمة العائدة Return
هي رقم التعريفي للاوبجيكت الذي صنعته و المعروف بID. حيث ان لكل اوبجيكت
رقم تعريفي خاص. حتى لو كانوا من نفس النوع. القيمة العائدة لم يستفد منها
بالمثال السابق. و بالمثال التالي سوف اريكم كيف نستفيد منها. نفرض اننا
نصمم لعبة حيث يقوم البطل باطلاق النار باتجاهين مختلفين بنفس الوقت. لا
داعي لتصميم طلقتين واحد لليمين و الاخرى لليسار. كل ما عليك فعله هو
كتابة كود بنفس طريقة التالي. حيث ان اسم الطلقة هو shot و اسم المتغير
الذي سيحفظ الرقم التعريفي للمتغير هو new_shot.
كود:
- الكود:
{
new_shot = instance_create(x,y,shot);
new_shot.hspeed = 10;
new_shot = instance_create(x,y,shot);
new_shot.hspeed = -10;
}
البطل. و يكون المتغيران x و y عائدان للبطل . اي ان الطلقات تخرج من
البطل. و استخدمنا hspeed وهو متغير للاوبجيت بعطيه سرعة افقية. بالطلقة
الاولى جعلناها تنطلق الي الجهة اليمنى حيث كانت الاشارة موجبة. و الى
الجهة اليسرى للطلقة الثانية بوضع اشارة سالبة.
قد يستغرب البعض من السطر التالي حيث اني لم اشرح هذا التركيب الغريب:
كود:
- الكود:
new_shot.hspeed = 10;
وقت. وفي مثالنا حددنا الاوبجيكت المطلوب وهو الذي تم حفظ رقمه التعريفي
بالمتغير new_shot و من ثم حددنا المتغير الخاص به المطلوب تغييره وهو
hspeed. ساقوم بشرح مفصل لاحقاً
عند الانتهاء من هذي الفقره. يجب ان تعلم بانك تعلمت اهم الاساسيات
المطلوبه وكل ما تبقي هو قيامك بتشغيل البرنامج وفتح ملف المساعده و البدء
بتصميم اكوادك الخاصة.
استخدام ملف المساعدة
في هذه الفقرة سوف تتعلم كيفية استخدام ملف المساعدة المرفق مع برنامج
الجيم ميكر . قد يعتقد البعض انه غير مفيد . لكني أؤكد ان ملف المساعده هو
افضل و اسرع و احسن مرجع للجيم ميكر. حيث يحتوي على جميع الشروحات و بعض
الامثلة للكودات. ساقوم بنسخ ولصق بعض الاوامر و سوف اقوم بتفسيرها إلى أن
تتمكن من قراءه الاوامر الاخرى بنفسك. ومنها يمكن تصميم العابك بسهولة و
يسر. وكالمعتاد , سوف نبحث عن الاوامر البسيطة كبداية. ثم ننتقل للمراحل
التي هي اصعب.
عند فتح ملف المساعده, تختار فصل لغة الجيم ميكر ومنه تجد عدة وحدات مقسمة بطريقة منسقة وبسيطة. و اهم الوحدات المطلوبة كمبتدئين هي:
الحسابات = Computing things
اللعب = Game play
واجة المستخدم او التحكم = User interaction
الرسومات = Game graphics
الاصوات و الموسيقى = Sound and music
والان نبداء بقراءة المثال الاول:
كود:
- الكود:
abs(x) Returns the absolute value of x.
لكلمة absolute value ومعناها القيمة المطلقة. نعم بالفعل. هي نفس القيمة
المطلقة التي سمعت بها في حصص الرياضيات. وكما تعلمت سابقاً. الامر السابق
هو عبارة عن دالة Function تدخل فيها قيمة معينة. ولقد وضع لها المتغير x
للتعبير عنها فقط ( ليس شرط ان يكون الحرف x بين القوسين ) ومن كلمة
Returns أي ترجع. نستنتج ان لها قيمة عائدة. وتكون القيمة العائده هي
القيمة المطلقة للقيمه المدخلة. يبدو الامر معقداً ؟ تابع المثال التالي:
كود:
- الكود:
get_value = abs(vspeed);
فلو كان vspeed = 15 فإن get_value = 15
ولو كان vspeed = -20 فإن get_value = 20
أليس الامر سهلاً ؟
نجرب مثال اكثر تعقيداً:
كود:
- الكود:
random(x) Returns a random real number between 0 and x. The number is always smaller than x.
يرجع رقم حقيقي عشوائي بين الصفر و المتغير. ويكون الرقم دائماً اصغر من المتغير.
تأمل جيداً . هل عرفت الحل ؟ ماذا لو كان المتغير يساوي 5. كم تتوقع ان تكون الاجابة ؟ من كم إلى كم ؟
لو كان تخمينك صحيحاً 100% . سيكون الجواب هو " بين 0 و 4.9999999999 ".
قد يتسأل البعض ؟ لماذا لم يكن الجواب هو بين 0 و 4 ؟ الجواب هو ان مصمم
البرنامج قام بتصميم الامر بهذه الطريقة لكي يستفاد منها بطرق اخرى لاحاجة
لشرحها الأن.
سنقوم الان بخطوه جديده من نوعها . وهي دمج دالتين بحيث اننا نحصل على رقم صحيح عشوائي. وذلك عن طريق الدالتين :
random و round
والدالة Round هي ااتقريب لأقرب عدد صحيح Integer ( كما هو موجود بملف المساعدة )
ولكن نريد ان يكون الناتج هو من 0 الي 9 . وجميعها اعداد صحيحة. يكون ذلك كالتالي:
كود:
- الكود:
{
range = 10;
get_value = round(random(range));
}
بالرياضيات) اي ان الناتج سيكون بين 0 و 9.99999999 . فقد يكون
3.535642114 و قد يكون غيره . وهذا ما لا نريده. نقوم بالتخلص من الكسور
عن طريق الدالة round حيث تحول القيمه 3.535642114 الي 3 وترجعها بالمتغير
get_value.
نوع اخر من القرائات بملف المساعدة. عباره عن شرح للمتغيرات الخاصة بالاوبجيكت. وهي مفيده جداً. ومن امثلتها :
كود:
- الكود:
x Its x-position.
y Its y-position.
xprevious Its previous x-position.
yprevious Its previous y-position.
xstart Its starting x-position in the room.
ystart Its starting y-position in the room.
المتغيررات السابقة. ولكن يجب ان تعلم ان هناك قيم لا يمكن تغيررها. لكن
يمكن الاستفاده منها. وامثلتها :
كود:
- الكود:
fps* Number of frames that are actually drawn per second.
current_time* Number of milliseconds that have passed since the system was started.
current_year* The current year.
current_month* The current month.
current_day* The current day.
الدوال المتوفره بالبرنامج ليكون لديك فكره عن قدرات الجيم ميكر قبل البدء
بتصميم العابك . مجرد تصفح سريع للملف.
منقول ..
Abdullah Alsayed- Admin
- الجنس :
عدد المساهمات : 1791
رد: بعض الاساسيات بلغة الجيم ميكر GML .
رائع أدمن صراحة استفدت كثيراً جداً من هذا الدرس !
أشعر بأنني قريباً سأكون بارعاً في كتابة الأكواد الصعبة !
شكراً جزيلاً لك !
أشعر بأنني قريباً سأكون بارعاً في كتابة الأكواد الصعبة !
شكراً جزيلاً لك !
ball- Lessons Moderator
- الجنس :
عدد المساهمات : 563
الأوسمة :
وسام المساعدة
وسام الدرس الحصري
رد: بعض الاساسيات بلغة الجيم ميكر GML .
مشكور ادمن استفدت كثيرا من هذا الدرس
Hopa-
- الجنس :
عدد المساهمات : 596
الأوسمة :
وسام المساعدة
abd-alrahman- Global Moderator
- الجنس :
عدد المساهمات : 757
الأوسمة :
وسام الجرافيك
وسام المساعدة
وسام الدرس الحصري
Abood Studio-
- الجنس :
عدد المساهمات : 667
الأوسمة :
وسام الدرس الحصري
وسام المساعدة
رد: بعض الاساسيات بلغة الجيم ميكر GML .
انا كنت عارف حاجات فى الـGMl لكن شكرا جدا
ShArP bLaDe-
- الجنس :
عدد المساهمات : 129
الأوسمة :
عاشق الجيم ميكر- Discussion Moderator
- الجنس :
عدد المساهمات : 728
الأوسمة :
وسام الدرس الحصري
وسام المساعدة
رد: بعض الاساسيات بلغة الجيم ميكر GML .
شكرا جزيلا لك ..
حاليا أنا مبتدىء وأن شاء الله أني أستفيد من شرحك...
حاليا أنا مبتدىء وأن شاء الله أني أستفيد من شرحك...
saed-
- الجنس :
عدد المساهمات : 1
رد: بعض الاساسيات بلغة الجيم ميكر GML .
مشكور الف شكر
ولكن عندي سوال لو نفذ الweapon
كيف اخلي الطلقات لاتطلق
ولكن عندي سوال لو نفذ الweapon
كيف اخلي الطلقات لاتطلق
abdalluh-
- الجنس :
عدد المساهمات : 43
رد: بعض الاساسيات بلغة الجيم ميكر GML .
الله يعطيك العافيه يا BOSS..... ..راااااااااائع ومبدع ... أفدتنا وأمتعتنااااا... لك منا خااااااااااااالص الشكررر...
THANK YOU ADMIN>
THANK YOU ADMIN>
ALMEHMADI-
- الجنس :
عدد المساهمات : 89
رد: بعض الاساسيات بلغة الجيم ميكر GML .
ااتمنى ان يثبت الدرس فهو مفيد جدا
امير الالعاب-
- الجنس :
عدد المساهمات : 123
مواضيع مماثلة
» طلب درس بلغة برنامج جيم ميكر
» مشكلة فى الجيم ميكر
» بعيدا عن الجيم ميكر
» خبر سار الجيم ميكر ستوديو
» مشكلة في الجيم ميكر
» مشكلة فى الجيم ميكر
» بعيدا عن الجيم ميكر
» خبر سار الجيم ميكر ستوديو
» مشكلة في الجيم ميكر
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
السبت فبراير 03, 2018 7:40 pm من طرف ZAHRANI BLACK
» مساعدة ضروورية
الإثنين يناير 29, 2018 10:32 pm من طرف king_of_fun
» شارك رابط تطبيقك من تطبيقك على الاندرويد على وسائل التواصل الاجتماعي
الإثنين يناير 29, 2018 12:45 pm من طرف ibraheem2d
» ازاي اصنع لعبه علي Android
الأحد يناير 28, 2018 4:31 pm من طرف ibraheem2d
» درس صناعة 2D بلاتفورم بسيط باستخدام مكتبة Simple Platform LIB حصريا !
الخميس يناير 11, 2018 2:44 am من طرف Abdullah Alsayed
» اخر مساعدة منكم لي في الجيم ماكر
الأربعاء يناير 03, 2018 2:18 am من طرف king_of_fun
» ادعوكم اصدقائي لتجريب لعبتي الاولي Am Head Soccer
الثلاثاء ديسمبر 26, 2017 2:41 pm من طرف nexusrex
» طلب مساعدة بخصوص لعبة pinball.
الأحد ديسمبر 03, 2017 8:52 pm من طرف moummi.mouh@gmail.com