تتضمن العديد من الألعاب نوعًا من الأعداء للقتال معهم. استكشف الطرق المختلفة التي يمكنك من خلالها إضافة - والبراعة - قتال الأعداء.
يلعب الأعداء دورًا مهمًا في جعل الألعاب مثيرة وتحديًا للاعبين. سواء كنت تقوم بإنشاء منصة ثنائية الأبعاد أو مطلق النار من أعلى لأسفل أو لعبة لعب الأدوار ، فإن إضافة الأعداء يمكن أن يعزز تجربة اللعب بشكل كبير.
تجعل واجهة Godot سهلة الاستخدام ولغة البرمجة النصية البديهية ، GDScript ، العملية فعالة وممتعة.
إعداد لعبة جودو
قبل الغوص في إنشاء العدو ، قم بإعداد الهيكل الأساسي للعبة ثنائية الأبعاد الخاصة بك محرك لعبة Godot.
قم بإنشاء مشروع جديد ثنائي الأبعاد في Godot. في المشهد الرئيسي ، قم بإنشاء ملف الحركية العقدة وسمها لاعب. داخل عقدة المشغل ، أضف ملف تصادم بشكل مستطيل ، والذي سيكون بمثابة صندوق إصابة اللاعب. أضف أيضًا ملف شبح عقدة كتمثيل مرئي لشخصية اللاعب.
الكود المستخدم في هذه المقالة متوفر في هذا مستودع جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.
قم بإرفاق كود GDScript التالي بملف لاعب عقدة لتمكين الحركة الأساسية:
extends KinematicBody2D
const SPEED = 200
func _physics_process(delta):
var motion = Vector2.ZEROif Input.is_action_pressed("ui_right"):
motion.x += SPEEDif Input.is_action_pressed("ui_left"):
motion.x -= SPEEDif Input.is_action_pressed("ui_down"):
motion.y += SPEEDif Input.is_action_pressed("ui_up"):
motion.y -= SPEED
motion = move_and_slide(motion)
باستخدام هذا الرمز ، يمكن للاعب التحرك لليسار ولليمين ولأعلى ولأسفل باستخدام مفاتيح الأسهم أو مفاتيح WASD.
خلق عدو بسيط
الآن بعد أن تم إعداد شخصية لاعب ، يمكنك إنشاء عدو بسيط.
أنشئ مشهدًا جديدًا وأضف ملف StaticBody2D العقدة المسماة العدو. داخل عقدة العدو ، أضف ملف تصادم عقدة على شكل دائرة لتحديد صندوق ضرب العدو. أضف أيضًا ملف شبح عقدة لتمثيل العدو بصريا.
مع إعداد الاصطدام ، سيكون العدو جاهزًا للتفاعل مع اللاعب والعناصر الأخرى في عالم لعبتك.
جعل العدو يتبع اللاعب
خلق أعداء يتبعون اللاعب يضيف مستوى جديدًا من التحدي للعبة.
أنشئ مشهدًا جديدًا لنوع العدو التالي وأضف ملف الحركية العقدة المسماة اتبع العدو مع CollisionShape2D. قم بإرفاق كود GDScript التالي بالعقدة FollowEnemy لجعله يتبع المشغل:
extends KinematicBody2D
const SPEED = 100
func _physics_process(delta):
var player = get_parent().get_node("Player")
var player_position = player.global_position
var enemy_position = global_position
var direction = player_position - enemy_position
direction = direction.normalized()
var motion = direction * SPEED * delta
move_and_collide(motion)
الآن ، اتبع العدو ستتحرك نحو موقع اللاعب في كل إطار.
مضيفا الرصاص العدو
الآن ، يمكنك جعل العدو يطلق الرصاص تجاه اللاعب. قم بإنشاء مشهد جديد وقم بتسميته رصاصة. أضف الحركية عقدة إلى مكان الحادث. إرفاق رصاصة. gd البرنامج النصي لعقدة KinematicBody2D في مشهد Bullet.tscn. أضف الكود التالي لتعريف فئة Bullet:
extends KinematicBody2D
const BULLET_SPEED = 300
var bullet_direction = Vector2.ZEROfunc _physics_process(delta):
var motion = bullet_direction * BULLET_SPEED * delta
move_and_collide(motion)
func set_direction(direction):
bullet_direction = direction.normalized()
الآن ، قم بإنشاء عقدة جديدة للعدو بالرصاص وقم بتسميتها الرماية. داخل عقدة ShootingEnemy ، أضف ملف تصادم عقدة على شكل مستطيل مثل hitbox.
قم بإرفاق كود GDScript التالي بعقدة ShootingEnemy لجعله يطلق الرصاص:
extends KinematicBody2D
const SPEED = 100
const SHOOT_DELAY = 1.5
var shoot_timer = SHOOT_DELAY# Import the Bullet scene
const BulletScene = preload("res://Bullet.tscn")func _physics_process(delta):
# Shooting logic
shoot_timer -= delta
if shoot_timer <= 0:
shoot_timer = SHOOT_DELAY
var bullet_instance = BulletScene.instance()
bullet_instance.global_position = global_position
bullet_instance.set_direction(direction)
get_parent().add_child(bullet_instance)
سيطلق العدو الآن الرصاص بشكل دوري باتجاه موقع اللاعب. استخدم الشرطي لو إفادة للتحقق مما إذا كان shoot_timer أقل من 0. إذا كان الأمر كذلك ، فقم بإطلاق الرصاصة.
تحرك العدو عشوائيا
بالإضافة إلى الأعداء الذين يتابعون اللاعب أو يطلقون النار عليه ، يمكن للعدو المتحرك عشوائيًا إدخال عنصر عدم القدرة على التنبؤ والتحدي في لعبتك. يتطلب إنشاء عدو بأنماط حركة عشوائية مزيجًا من المنطق البسيط وتوليد الأرقام العشوائية.
ابدأ بإنشاء مشهد جديد وإضافة ملف الحركية العقدة المسماة عشوائي. قم بإنشاء برنامج نصي جديد باسم RandomEnemy.gd وإرفاقه بعقدة RandomEnemy. سيتعامل البرنامج النصي مع منطق الحركة العشوائية.
extends KinematicBody2D
const MOVE_SPEED = 100
const MOVE_INTERVAL_MIN = 1.0
const MOVE_INTERVAL_MAX = 3.0var move_timer = 0.0
var move_interval = 0.0
var move_direction = Vector2.ZEROfunc _ready():
choose_new_direction()func choose_new_direction():
move_interval = rand_range(MOVE_INTERVAL_MIN, MOVE_INTERVAL_MAX)
move_timer = move_interval
move_direction = Vector2(randf(), randf()).normalized()func _physics_process(delta):
move_timer -= deltaif move_timer <= 0.0:
choose_new_direction()
var motion = move_direction * MOVE_SPEED * delta
move_and_collide(motion)
بما في ذلك الميزات الإضافية
هناك العديد من الميزات الإضافية التي يمكنك إضافتها لأعدائك لجعل اللعب أكثر إثارة.
معارك الزعيم
تعتبر معارك الزعماء بمثابة لحظات ذروة في لعبتك ، حيث توفر مواجهات لا تُنسى وصعبة تختبر مهارات اللاعبين ومثابرتهم. عادةً ما يكون أعداء الزعماء أكبر وأقوى من الأعداء العاديين ، مما يتطلب من اللاعبين استخدام استراتيجيات وتكتيكات محددة لهزيمتهم.
التفريخ الديناميكي للعدو
قم بتطبيق نظام تفريخ ديناميكي يضبط مواجهات العدو بناءً على أداء اللاعب أو موقعه أو الأحداث داخل اللعبة. هذا يخلق تجربة لعب أكثر استجابة وتخصيصًا.
التكيف البيئي
قم بإنشاء أعداء يمكنهم التكيف مع البيئة ، مثل الأعداء الذين يمكنهم الطيران أو السباحة أو تسلق الجدران. يفتح هذا التنوع إمكانيات جديدة للعب ويتحدى اللاعبين للتنقل عبر تضاريس مختلفة.
نقاط ضعف العدو ومقاومته
عيّن نقاط ضعف ومقاومة محددة للأعداء ، وشجع اللاعبين على تجربة أساليب وتكتيكات مختلفة. قد يكون بعض الأعداء عرضة لهجمات أو عناصر معينة ، بينما يكون البعض الآخر محصنًا أو مقاومًا.
تخصيص العدو وتغيرات السلوك
أضف مستوى من عدم القدرة على التنبؤ من خلال إعطاء الأعداء متغيرات سلوكية عشوائية. على سبيل المثال ، قد يكون للعدو أنماط هجوم مختلفة أو سرعات حركة مختلفة في مراحل اللعب المختلفة ، مما يحافظ على اللعبة متجددة وقابلة لإعادة اللعب.
يمكن أن يؤدي تضمين مجموعة متنوعة من هذه الميزات الإضافية إلى إثراء تصميم عدو لعبتك ، مما يجعل كل مواجهة فريدة ولا تنسى للاعبين.
تذكر أنه على الرغم من أن إدخال آليات جديدة قد يكون أمرًا مثيرًا ، إلا أنه من الضروري الحفاظ على التوازن والتماسك في التصميم العام للعبتك.
أفضل الممارسات لخلق الأعداء
عند إنشاء أعداء في لعبة Godot الخاصة بك ، ضع في اعتبارك أفضل الممارسات التالية:
اتصال مرئي واضح
استخدم تصميمات العدو المميزة التي تبرز من البيئة لتسهيل التعرف على الأعداء.
ضع في اعتبارك استخدام الترميز اللوني أو الصور الظلية الفريدة للتمييز بين أنواع الأعداء. تأكد من أن الرسوم المتحركة والتأثيرات المرئية للعدو تعزز سلوكياتهم وهجماتهم.
صعوبة الموازنة
أدخل الأعداء بشكل تدريجي مع زيادة التعقيد مع تقدم اللاعب خلال اللعبة. اختبر مواجهات العدو مع لاعبين من مستويات مختلفة من المهارة للتأكد من أن التحديات مناسبة لجميع اللاعبين. تجنب ارتفاعات الصعوبة المفاجئة التي يمكن أن تحبط اللاعبين.
تجنب اللقطات الرخيصة
صمم الأعداء بهجمات يمكن للاعب مراوغتها أو منعها ، مما يمنحهم فرصة للرد. استخدم صندوق إصابة عادل لهجمات الأعداء ، وتجنب الهجمات التي تتجاوز تمثيلهم المرئي. استخدم الإشارات أو الإشارات التحذيرية للإشارة إلى الهجمات الخطيرة.
اختبار اللعب والتكرار
اختبر بانتظام مواجهات العدو أثناء التطوير لتقييم عامل المتعة والصعوبة. اجمع ردود الفعل من اللاعبين واستخدمها لضبط سلوكيات العدو ونقاط قوته وضعفه.
مؤثرات صوتية
تلعب المؤثرات الصوتية دورًا مهمًا في إنشاء بيئة لعب غامرة وآسرة. عندما يتلقى عدو ضربة ، أضف مناسبة مؤثرات صوتية خالية من حقوق النشر لتعزيز الشعور بالتأثير والمشاركة في القتال.
يمكن أن تصاحب لعبتك كل ضربة أو إصابة بإشارات صوتية مميزة تتوافق مع نوع الهجوم وخصائص العدو.
جعل ألعاب Godot أكثر تفاعلاً مع الأعداء
الأعداء عنصر أساسي في العديد من الألعاب ، حيث يوفرون التحديات والعقبات والشعور بالإنجاز عند الهزيمة. من خلال إضافة أنواع مختلفة من الأعداء بسلوكيات مختلفة ونقاط صحية وآليات إطلاق نار ، يمكنك إنشاء تجارب لعب متنوعة وجذابة للاعبين.
تذكر موازنة الصعوبة ، وتقديم ملاحظات مرئية وسمعية ، واختبار أعدائك بدقة لتزويد اللاعبين بتجربة لعب ممتعة ومجزية.