[شرح] ما هي Alarm Events ؟
صفحة 1 من اصل 1 • شاطر
[شرح] ما هي Alarm Events ؟
السلام عليكم.. من أكثر الEvents (الأحداث) اللي بيستخدمها مطور الألعاب بالجيم ميكر هي الـalarms (المنبهات) ودي من أسمها أكيد ليها علاقة بالوقت ولكن الوقت في اللعبة فهو بيتحسب بالFrame يعني طول ما اللعبة شغالة طول ما في frames بتظهر.. ممممم طيب ده بيخلينا نسأل ايه علاقة سرعة الـframes بالوقت الحقيقي اللي احنا عايشينه أو بمعنى أصح بوقت الكومبيوتر أو نظام التشغيل اللي بيشغل اللعبة ؟
FPS أو عدد الإطارات في الثانية ؟
أي لعبة أثناء تشغيلها يوجد ما يعرف بـFPS وهو معدل ظهور اللقطات من اللعبة كل ثانية وده بيختلف عن الـroom_speed ..
بالنسبة لـ room speed هي عدد الsteps (اللقطات) اللي انت كمبرمج عايز انها تحصل كل ثانية وعادة بتكون يا أما 30 أو 60 و60 هي الأكثر شيوعا لانه بتكون اللعبة smoother وده متغير تقدر تغيره أثناء ما اللعبة شغالة بالكود ده :
- الكود:
room_speed = 60;
أما الـfps فده عدد الـsteps اللي بتظهر فعليا اثناء تشغيل اللعبة في الثانية (بيعتمد على سرعة الجهاز) وده برضه متغير جوة الجيم ميكر ممكن تعرف قيمته انك تعمل له draw مثلا ولكن ده مينفعش تغيره ولو عايز تستخدمه ممكن تستخدم الكود ده :
- الكود:
room_caption = string(fps);
طيب ايه علاقة ده بقى بالـalarms ؟
قبل ما نقول علاقة الـalarms بالكلام اللي فات لازم نعرف ايه هو حدث الـalarm.. عشان تضيف حدث alarm جديد بتفتح الأوبجكت اللي عايز تعمل جواه الحدث وتضغط Add Event بعدها تضغط Alarm وتختار رقم الـAlarm اللي إنت عايزه من 0-11 .. فلنفترض اننا اخترنا Alarm 0
متى يتنفذ الـAlarm ؟
يتم تنفيذ حدث الـAlarm في اللحظة التي يصل فيها قيمة الـalarm للـ 0 .. قيمة ؟ هو متغير ؟ .. أه ممكن تعتبر الـalarm متغير وقيمته بتحددها انت عن طريق أو الكود ده :
- الكود:
alarm[0] = 60;
وقيمة المتغير ده بتقل بقيمة (واحد) كل لحظة من اللعبة لحد ما يوصل 0 وفي اللحظة دي (alarm[?]=0) بيتنفذ الكود اللي موجود في حدث الـalarm وهنا نرجع للكلام اللي قلناه في الأول .. اللحظة بتتحد إزاي ؟ زي ما قلنا الـroom_speed هي السرعة اللي انت بتحددها كمبرمج وهي عدد الإطارات في الثانية وهو ده اللي على أساسه بتحسب الـalarm مثلاً :
إذا كان room_speed يساوي 30 .. اذن فالثانية الواحدة عبارة عن 30 خطوة (لقطة) من اللعبة ولو room_speed يساوي 60 يبقى الثانية الواحدة عبارة عن 60 خطوة من اللعبة وال alarm بيتحدد قيمته طبقاً للـsteps مش الثواني ودي نقطة مهمة جداً .. خلينا ناخد مثال بسيط كده نوضح بيه الحكاية دي :
هنعمل اوبجكت نسميه obj_alarm ونحط فيه الحدث alarm 0 ونكتب فيه الكود :
- الكود:
show_message("alarm 0 = 0");
وحدث نضيف فيه قيمة للـalarm[0] عشان يشتغل وليكن Space :
- الكود:
alarm[0] = room_speed*5;
نحط الأوبجكت في الروم ونشغلها (ممكن تعمل draw للـAlarm في draw event عشان تفهم أكتر الـalarm شغال إزاي) .. لما تشغل اللعبة إضغط space مرة واحدة وعد 5 ثواني هتلاقي الـalarm[0] تنفذ بعدها مباشرة, طيب ليه خمسة بالظبط .. إحنا زي ما قلنا الـroom_speed بتعبر عن الثانية في اللعبة _بعيداً عن عدد الخطوات اللي في الثانية_ ولاننا وضعنا قيمته بـroom_speed*5 وبكده ايا كانت room_speed فهو في الحقيقة عبارة عن فترة ثانية واحدة فقط أستطيع إستخدامها كثابت وهمي لقيمة الثانية في لعبتي
ملحوظة.. قيم الـalarm بتوضح حالته وده طبقا للآتي :
- alarm[0]>0 يبقى الـalarm 0 مفعل وفي حالة تناقص مستمر وسيتم تنفيذه عند وصوله 0
- alarm[0]=0 يعني الـalarm 0 يتم تنفيذه الآن
- alarm[0]=-1 الـalarm 0 ليس مفعل (لا يحدث له تناقص ولا يتم تنفيذه)
استخدام الـAlarms ؟
زي ما قلنا الـalarms مهمة جداً وبستخدم تقريباً في كل الألعاب ودي أمثلة على بعض الحالات اللي بتستخدمها فيها:
كيفية عمل عد تصاعدي / تنازلي :
نفرض إن عندنا متغير اسمه count عايزين نزود قيمته (1) كل ثانية واحدة .. في أوبجكت وليكن obj_ctrl نضيف في create event تعريف الـمتغير count ونفعل alarm[0] بقيمة (ثانية واحدة) في نفس الحدث ويبقى الكود كده :
- الكود:
count = 0;
alarm[0] = room_speed;
نروح لalarm 0 الحدث ونضيف الكود اللي يزود قيمة المتغير count بمقدار واحد :
- الكود:
count += 1;
وعشان نرسم المتغير count على الشاشة نروح لـDraw Event ونحط الكود :
- الكود:
draw_text(x,y,string(count);
لاحظ إستخدام string() لان المتغير count هنا متغير عددي لذلك لابد من تحويله إلى متغير نصي عند رسمه
لو شغلت اللعبة في هذه الحالة هتلاقي ان العد بيحصل مرة واحدة فقط ولا بتكرر وده لإن تحديد قيمة الـalarm حصل مرة واحدة فقط وهي في create event والحدث ده بيحصل مرة واحدة بس (لحظة إنشاء الأوبجكت) عشان كده لازم تعيد تحديد قيمة الـalarm كل ما توصل قيمته لـ 0 وامتى بيوصل قيمة الalarm لصفر ؟ .. بالظبط في لحظة حدوث الـalarm .. عشان كده بنحدد قيمة الـalarm[0] لتاني مرة جوة الحدث نفسه وبكده الكود اللي جوة الـalarm 0 يكون :
- الكود:
count += 1;
alarm[0] = room_speed;
تغيير إتجاه الأوبجكت (العدو) عشوائيا كل x ثانية :
بنفس الطريقة يمكننا عمل اختيار عشوائي لاتجاه اوبجكت ( العدو ) مثلا .. في obj_enemy نضع في Create event تحديد لسرعة الاوبجكت واتجاهه والalarm :
- الكود:
speed = 1;
direction = random(360);
alarm[0] = room_speed*3
ونروح لحدث alarm 0 ونحط الكود :
- الكود:
direction = random(360);
alarm[0] = room_speed*3;
ونجرب اللعبة
لحد كده الكلام شبه خلص ولكن في شوية ملحوظات لازم ناخد بالنا منها :
- لو هتعيد تعريف أو تحديد قيمة الـalarm جوة نفس حدث الـalarm فلازم تتأكد إنه اخر كود في آخر سطر عشان يبقى اخر حاجة تتنفذ ومتحصلش مشكلة.
- كل instance له 12 متغير للـalarms وهم من 0-11 ويمكنك استدعائه كأي متغير آخر باستخدام other. و objname. مثل :
- الكود:
objname.alarm[0] = room_speed*2;
other.alarm[n] = room_speed*3;
- الalarm الذي لا يحتوي على أكواد أو actions لا يعمل (لا يتناقص) حتى وإن قمت بإعطائه قيمة معينة .. لذلك يجب عليك وضع أي كود أو أكشن داخل الحدث alarm حتى يعمل حتى ولو كان مجرد تعليق comment
دلوقتي ممكن تجرب بنفسك تعمل عد تنازلي وأول ما توصل قيمة الـcount لـ 0 تظهر رسالة مثلاً .. أي حد عنده أي استفسار في أي حاجة في الموضوع يسأل في رد هنا وإن شاء الله هرد عليه في أسرع وقت
عدل سابقا من قبل Abdullah Alsayed في الإثنين ديسمبر 15, 2014 7:24 pm عدل 1 مرات
Abdullah Alsayed- Admin
- الجنس :
عدد المساهمات : 1791
رد: [شرح] ما هي Alarm Events ؟
درس اكثر من رائع لكن في بعض الالعاب ثلاثية الالعاب المتكونة من رووم كبير يقل نسبة الـFPS لو مهما عملت تنزل بعض الاحيان الى 20 او 24
GM Teacher-
- الجنس :
عدد المساهمات : 748
رد: [شرح] ما هي Alarm Events ؟
الف شكر انت مش عارف انا كنت محتاج الشرح كده من زمان شكرا
mon-
- الجنس :
عدد المساهمات : 34
رد: [شرح] ما هي Alarm Events ؟
درس ممتاز جدا
ابدعت
Nephron- Discussion Moderator
- الجنس :
عدد المساهمات : 389
الأوسمة :
وسام المساعدة
مواضيع مماثلة
» [تم الحل]Alarm , المؤقتات
» الأحداث | Events
» حول event s action
» ما فائدة trigger
» كيفية استعمال .. الـ Trigger Events لتصنع احداثك الخاصة
» الأحداث | Events
» حول event s action
» ما فائدة trigger
» كيفية استعمال .. الـ Trigger Events لتصنع احداثك الخاصة
صفحة 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