اخلق إحساسًا بالتقدم والتحدي من خلال إضافة مجموعة متنوعة من المستويات إلى ألعابك.

يعد إنشاء المستويات جانبًا مهمًا في تصميم اللعبة ويمكن أن يعزز بشكل كبير من جاذبية لعبتك بشكل عام. توفر المستويات الهيكل والتحديات التي تحافظ على تفاعل اللاعبين وتحفيزهم للتقدم في اللعبة.

من خلال صياغة مستويات جيدة التصميم بعناية ، يمكنك إنشاء تجربة غامرة وممتعة أكثر للاعبين. سواء كنت مبتدئًا أو مطور ألعاب متمرسًا ، فإن Godot يجعل من السهل إنشاء مستويات جذابة تجعل اللاعبين يعودون للحصول على المزيد.

إعداد لعبة جودو

قبل البدء في إنشاء المستويات ، من الضروري إعداد مشروع لعبتك ثنائية الأبعاد محرك لعبة جودو.

الكود المستخدم في هذه المقالة متوفر في هذا مستودع جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.

أنشئ مشهدًا جديدًا وأضف ملف Node2D العقدة كعقدة الجذر. سيكون هذا بمثابة حاوية لجميع العقد الأخرى في المشهد الخاص بك. الآن بعد أن تم إعداد مشروعك ، حان الوقت لإضافة شخصية اللاعب إلى المشهد.

أنشئ مشهدًا جديدًا بالنقر بزر الماوس الأيمن في لوحة Scene والاختيار مشهد جديد. أضف شخصية عقدة لتمثيل شخصية اللاعب. ال شخصية توفر العقدة ميزات مدمجة لاكتشاف الحركة والاصطدام للأحرف ثنائية الأبعاد.

instagram viewer

داخل شخصية عقدة ، إضافة تصادم عقدة بشكل مستطيل و a شبح عقدة لتمثيل مظهر اللاعب.

من خلال إعداد شخصية المشغل وصورها المرئية ، يمكنك الآن التركيز على إنشاء مستواك الأول.

قم بإنشاء مستويين

لإنشاء مستويات في Godot ، يمكنك استخدام ملفات المشهد (.tscn) لتمثيل كل مستوى على حدة. مع مستويين ، يمكنك تنفيذ تخطيطات فريدة ومنصات متحركة.

كود اللاعب

ال شخصية البرنامج النصي مسؤول عن التعامل مع حركة اللاعب بناءً على مدخلات المستخدم. في GDScript المتوفرة ، يمكنك حساب اتجاه الحركة بناءً على ضغطات المفاتيح وتعيين سرعة اللاعب وفقًا لذلك.

تحدد سرعة اللاعب سرعة تحركه و تحرك و اصطدم وظيفة تعتني باكتشاف الاصطدام.

extends CharacterBody2D

var speed = 300

func _physics_process(delta):
var input_dir = Vector2.ZERO

if Input.is_action_pressed("ui_left"):
input_dir.x -= 1

if Input.is_action_pressed("ui_right"):
input_dir.x += 1

if Input.is_action_pressed("ui_up"):
input_dir.y -= 1

if Input.is_action_pressed("ui_down"):
input_dir.y += 1

velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)

كود المنصة

ال منصة يمتد النص StaticBody2D، مما يعني أن النظام الأساسي لن يتحرك إلا إذا قمت بتطبيق حركة عليه. في هذه الحالة ، يمكنك استخدام ملف سرعة الحركة متغير للتحكم في سرعة تحرك المنصة.

يتحرك النظام الأساسي ذهابًا وإيابًا أفقيًا ضمن النطاق المحدد (100 إلى 400 وحدة في هذا المثال). عندما يصل إلى الحافة ، فإنه يعكس اتجاه حركته.

# Platform Movement
extends StaticBody2D

const move_speed = 100
var move_direction = Vector2(1, 0)

func _physics_process(delta):
var platform_movement = move_direction * move_speed * delta
translate(platform_movement)

# Change direction when reaching the edge of the platform's path
if position.x > 400or position.x < 100:
move_direction *= -1

باستخدام هذه البرامج النصية ، يمكنك إنشاء أنماط حركة مثيرة للاهتمام للمنصات وتصميم تجارب لعب جذابة في ألعاب المنصات الخاصة بك.

ربط المستويات

في لعبة نموذجية ، سترغب في أن يتقدم اللاعبون من مستوى إلى آخر بسلاسة. للقيام بذلك ، قم بتنفيذ برنامج نصي لـ Level Manager يتعامل مع تبديل المستوى عندما يعبر اللاعب حدود الشاشة.

ال مدير المستوى البرنامج النصي يتتبع رقم المستوى الحالي وحجم الشاشة. يقوم بتحميل المستوى الأولي (المستوى 1) أثناء _مستعد(). ال مستوى تحميل تأخذ الوظيفة رقم مستوى كمدخلات ، وتبني المسار إلى ملف المشهد المقابل ، وتنشئ مشهد المستوى.

أضف المستوى الجديد كطفل لـ مدير المستوى; سيؤدي هذا إلى تبديل المستوى الحالي بشكل فعال.

extends Node2D

var level_number = 1
var screen_size = Vector2()
var is_switching_level = false

func _ready():
screen_size = get_viewport_rect().size
load_level(level_number)

func load_level(level):
var level_path = "res://Level" + str(level) + ".tscn"
var level_scene = load(level_path)
var level_instance = level_scene.instantiate()
add_child(level_instance)
is_switching_level = false

func switch_level():
if is_switching_level:
return

is_switching_level = true
level_number += 1

if level_number > 2:
level_number = 1

# Assuming the player node is named "Player"
var player = get_node("Node2D/Player")

if player:
var player_position = player.position

if player_position.x < 0:
player.position.x = screen_size.x
elif player_position.x > screen_size.x:
player.position.x = 0
elif player_position.y < 0:
player.position.y = screen_size.y
elif player_position.y > screen_size.y:
player.position.y = 0

get_node("Node2D").queue_free()
load_level(level_number)

func _process(delta):
# Check if the player crosses the screen boundary
# Assuming the player node is named "Player"
var player = get_node("Node2D/Player")

if player:
var player_position = player.position
var condition1 = player_position.x < 0
var condition2 = player_position.x > screen_size.x
var condition3 = player_position.y < 0
var condition4 = player_position.y > screen_size.y

if condition1 or condition2 or condition3 or condition4 :
switch_level()

من خلال تنفيذ Level Manager ، يمكنك الانتقال بسلاسة بين المستويات والحفاظ على بيانات اللاعب عبر المستويات ، مما يضمن تجربة لعب سلسة.

بما في ذلك الميزات الإضافية

يتيح لك إنشاء المستويات إضافة ميزات مختلفة إلى لعبتك ، مما يجعلها أكثر جاذبية وإثارة للاعبين.

المقتنيات

أضف عناصر قابلة للتحصيل مثل العملات المعدنية أو النجوم أو المفاتيح التي يمكن للاعبين جمعها لفتح مناطق جديدة أو تلقي مكافآت. تشجع المقتنيات الاستكشاف وتضيف طبقة من التحدي إلى طريقة اللعب.

أعداء

قدم الأعداء بسلوكيات وأنماط حركة مختلفة. يخلق الأعداء عقبات للاعب للتغلب عليها ، مما يضيف الإستراتيجية والإثارة إلى اللعبة.

زادت الطاقة

قم بتضمين شكا من السلطة التي تعزز بشكل مؤقت قدرات اللاعب ، مثل السرعة المتزايدة ، أو المناعة ، أو الهجمات المحسّنة. توفر شكا من القوة لحظات من التمكين ويمكن أن تساعد اللاعبين في التغلب على الأقسام الصعبة.

الألغاز

صمم عناصر الألغاز التي يجب على اللاعبين حلها للتقدم عبر المستوى. تضيف الألغاز جانبًا عقليًا إلى طريقة اللعب ويمكن أن تجعل اللاعبين يشعرون بالإنجاز عندما يكتشفونها.

من خلال دمج هذه الميزات الإضافية في مستوياتك ، يمكنك إنشاء تجربة لعب غنية ومتنوعة تجذب اللاعبين وتجعلهم منغمسين في عالم لعبتك.

أفضل الممارسات لإنشاء المستويات

عند إنشاء المستويات ، يمكن أن يساعد وضع بعض أفضل الممارسات في الاعتبار في ضمان تجربة جيدة الإعداد وممتعة للاعبين:

صعوبة التوازن

حافظ على منحنى صعوبة سلس عبر مستوياتك. قم بزيادة التحديات تدريجيًا للحفاظ على تفاعل اللاعبين دون إرباكهم. أدخل آليات وتحديات جديدة تدريجيًا ، مما يسمح للاعبين بالتكيف والتعلم.

شجع الاستكشاف

مستويات التصميم مع المسارات والأسرار الخفية والمناطق الاختيارية ليستكشفها اللاعبون. يكافئ الاستكشاف اللاعبين بالمكافآت أو المقتنيات أو الاختصارات ، مما يضيف عمقًا إلى طريقة اللعب.

الاختبار والتكرار

Playtest المستويات الخاصة بك على نطاق واسع لتحديد أي مشاكل أو أخطاء أو اختلالات. كرر تصميم المستوى بناءً على ملاحظات اللاعب لتحسين التجربة الإجمالية.

المرئيات والصوتيات

انتبه إلى الجوانب المرئية والصوتية لمستوياتك. يمكن أن تساهم الرسومات الجذابة والمؤثرات الصوتية الخالية من حقوق الطبع والنشر بشكل كبير في جو اللعبة وانغمارها.

مستوى التدفق

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

من خلال الالتزام بأفضل الممارسات ، يمكنك إنشاء مستويات ليست ممتعة فقط للعب ولكن أيضًا مصممة جيدًا ومتماسكة في سياق لعبتك.

المستويات تجعل ألعاب Godot أكثر جاذبية

تلعب المستويات دورًا محوريًا في جعل ألعاب Godot أكثر جذبًا للاعبين. توفر المستويات المصممة جيدًا إحساسًا بالتقدم والإنجاز والاستكشاف ، مما يحفز اللاعبين على مواصلة اللعب.

من خلال فهم مبادئ تصميم المستوى ، والاستفادة من قدرات جودو ، والتنفيذ ميزات إضافية ، يمكنك صياغة مستويات تأسر اللاعبين وترقي بلعبتك إلى مستوى جديد مرتفعات.