سنتعرف في هذا المقال وهو جزء من سلسلة دليل جودو، على الخطوة الأخيرة في بناء لعبة سفينة الفضاء ثنائية الأبعاد، وهي كيفية إضافة زر لبدء اللعبة وإعلان نهاية اللعبة Game Over وهو ما سنتعلمه في مقال اليوم.
إطلاق اللعبة
عندما نشغّل اللعبة حاليًا من داخل محرك الألعاب جودو، سيبدأ اللعب مباشرةً، ولهذا سنضيف زرًا كي لا تبدأ اللعبة إلا بعد النقر عليه. لتحقيق ذلك، سنضع زر البدء في مكان مركزي في واجهة اللعبة ونمكّن اللاعب من النقر عليه لبدء اللعبة.
يمكن تحقيق ذلك باستخدام عقدة CenterContainer
وCanvasLayer
، وضبط إعدادات التموضع Layout لضمان أن الزر سيكون في مركز الشاشة ويستجيب جيدًا على مختلف أحجام الشاشات.
سنضيف عقدةً من النوع CenterContainer
إلى المشهد الرئيسي وكابن للعقدة CanvasLayer
، ونضبط الخاصية Layout>Anchor Preset>Layout Mode
لتكون قيمتها على كامل المستطيل Full Rect.
سنضيف بعد ذلك عقدة ابن من النوع TextureButton
ونسمّيها Start، ثم نضع الصورة START (48 x 8).png
في الخاصية Textures>Normal
لهذا الزر.
سنضيف مرجعًا إلى الزر في أعلى سكريبت المشهد الرئيسي كما يلي:
@onready var start_button = $CanvasLayer/CenterContainer/Start
والآن سنصل الإشارة pressed
الخاصة بالزر إلى العقدة Main
ثم نضيف الشيفرة التالية:
func _on_start_pressed(): start_button.hide() new_game()
تعالج الدالة ()new_game
عملية إطلاق اللعبة، ولهذا سنعدّل مضمون الدالة ()ready_
كي تعرض زر البدء بدلًا من نشر الأعداء:
func _ready(): start_button.show() # spawn_enemies()
سنضيف الآن الدالة ()new_game
إلى السكريبت الرئيسي على النحو الآتي:
func new_game(): score = 0 $CanvasLayer/UI.update_score(score) $Player.start() spawn_enemies()
يجب أن يظهر زر البداية الآن عند تشغيل اللعبة، وسيؤدي الضغط عليه إلى انطلاقها
إنهاء اللعبة
من أجل إنهاء اللعبة، ومنحها الشكل النهائي بالعبارة الشهيرة Game Over، سنحتاج إلى إضافة عقدة ابن من النوع TextureRect
إلى العقدة CenterContainer
، وسنسميها GameOver.
سنستخدم الصورة GAME_OVER (72 x 8).png
كخلفية لها، وستتداخل هذه العقدة مع عقدة زر البداية، لكن لن يؤثر ذلك على اللعبة لأن كلًا منهما سيظهر في توقيت مختلف.
سنضيف الآن مرجعًا آخر إلى أعلى السكريبت الرئيسي كما يلي:
@onready var game_over = $CanvasLayer/CenterContainer/GameOver
نضيف بعد ذلك الدالة ()game_over.hide
إلى الدالة ()ready_
، ثم نصل إشارة اللاعب died
إلى Main
:
func _on_player_died(): get_tree().call_group("enemies", "queue_free") game_over.show() await get_tree().create_timer(2).timeout game_over.hide() start_button.show()
وهنا ستعرض الشيفرة السابقة عبارة Game Over لمدة ثانيتين، ثم تعود باللاعب إلى زر البداية كي يتمكن من إعادة اللعبة.
الخلاصة
بهذا نكون قد أنهينا بناء لعبة بسيطة ثنائية الأبعاد عبر محرك الألعاب جودو، وإن أردت الاطلاع على المزيد من الأفكار والتقنيات في استخدام محرّك الألعاب جودو، وكيفية تسخيرها في تحويل أفكارك إلى ألعاب احترافية ننصحك بالاطلاع على دورة تطوير الألعاب باستخدام محرك جودو التي تقدمها أكاديمية حسوب التي تنطلق بك من الصفر وحتى الاحتراف من خلال دروس فيديو أعدها وقدمها مطورون خبراء في هذا المجال وباللغة العربية.
وإن كنت تشعر أنك فهمت التقنيات التي ناقشناها في هذه السلسلة، فأنت مستعد لتطوير اللعبة أكثر. لهذا، حاول إضافة ميزة واحدة جديدة إلى اللعبة، ونقترح عليك بعضًا منها:
- إضافة أنواع مختلفة من الأعداء: ستجد أيقونات مختلفة للأعداء استفد من ذلك
- مجموعات من الأعداء: أضف مجموعة أخرى من الأعداء عندما تنتهي من المجموعة الأولى
- كبير الأعداء: جرب أن تضيف عدوًا أكبر حجماً من الأعداء العاديين
- معززات القوة: جرب عرض جوائز تعزز قوة المركبة الفضائية، وفكر كيف ستجمعها
- إعادة شحن الدرع: أضف معززات لتدعيم الدرع الذي يحمي السفينة الفضائية
- تطوير القذائف: أضف أنواعًا أخرى من القذائف
- إضافة مؤثرات صوتية وأصوات: يمكنك إضافة تأثيرات صوتية إلى اللعبة لجعلها أكثر جاذبية
ترجمة -وبتصرف للمقالين: Starting and Ending the Game و Wrapping up.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.