Створення рівнів є важливим аспектом дизайну гри, який може значно підвищити загальну привабливість вашої гри. Рівні забезпечують структуру та виклики, які залучають гравців і мотивують їх прогресувати у грі.
Ретельно створюючи добре продумані рівні, ви можете створити більш захоплюючий і приємний досвід для своїх гравців. Незалежно від того, початківець ви чи досвідчений розробник ігор, Godot дозволяє легко створювати захоплюючі рівні, які змусять гравців повертатися за новими.
Налаштування гри «Годо».
Перш ніж почати створювати рівні, важливо налаштувати проект 2D-ігри в Godot Game Engine.
Код, використаний у цій статті, доступний тут Репозиторій GitHub і є безкоштовним для використання за ліцензією MIT.
Створіть нову сцену та додайте вузол Node2D як кореневий вузол. Це буде контейнером для всіх інших вузлів у вашій сцені. Тепер, коли ваш проект налаштовано, настав час додати персонажа гравця до сцени.
Створіть нову сцену, клацнувши правою кнопкою миші на панелі «Сцена» та вибравши «Нова сцена». Додайте вузол CharacterBody2D для представлення персонажа гравця. Вузол CharacterBody2D надає вбудовані функції для виявлення руху та зіткнення для 2D-персонажів.
У вузол CharacterBody2D додайте вузол CollisionShape2D із прямокутною формою та вузол Sprite, щоб представити зовнішній вигляд гравця.
Налаштувавши персонажа гравця та його візуальні елементи, тепер ви можете зосередитися на створенні свого першого рівня.
Створіть два рівні
Щоб створити рівні в Godot, ви можете використовувати файли сцен (.tscn), щоб представити кожен рівень окремо. За допомогою двох рівнів ви можете реалізувати унікальні макети та рухомі платформи.
Код гравця
Сценарій CharacterBody2D відповідає за обробку рухів гравця на основі введення користувача. У наданому GDScript ви можете обчислити напрямок руху на основі натискання клавіш і відповідно встановити швидкість гравця.
Швидкість гравця визначає, наскільки швидко він рухається, а функція move_and_collide піклується про виявлення зіткнень.
extends CharacterBody2Dvar speed = 300
func _physics_process(delta):
var input_dir = Vector2.ZEROif Input.is_action_pressed("ui_left"):
input_dir.x -= 1if Input.is_action_pressed("ui_right"):
input_dir.x += 1if Input.is_action_pressed("ui_up"):
input_dir.y -= 1if Input.is_action_pressed("ui_down"):
input_dir.y += 1velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)
Код платформи
Сценарій платформи розширює StaticBody2D, що означає, що платформа не рухатиметься, доки ви не застосуєте до неї рух. У цьому випадку ви можете використовувати змінну move_speed, щоб контролювати швидкість руху платформи.
Платформа рухається вперед і назад горизонтально в межах зазначеного діапазону (у цьому прикладі від 100 до 400 одиниць). Коли він досягає краю, він змінює напрямок руху.
extends StaticBody2Dconst move_speed = 100
var move_direction = Vector2(1, 0)func _physics_process(delta):
var platform_movement = move_direction * move_speed * delta
translate(platform_movement)
if position.x > 400 or position.x < 100:
move_direction *= -1
Використовуючи ці сценарії, ви можете створювати цікаві шаблони руху для платформ і проектувати захоплюючий ігровий процес у своїх іграх-платформерах.
Підключення рівнів
У типовій грі вам потрібно, щоб гравці плавно переходили від одного рівня до іншого. Для цього реалізуйте сценарій диспетчера рівнів, який обробляє перемикання рівнів, коли гравець перетинає межу екрана.
Сценарій диспетчера рівнів відстежує номер поточного рівня та розмір екрана. Він завантажує початковий рівень (рівень 1) під час _ready(). Функція load_level приймає номер рівня як вхідні дані, створює шлях до відповідного файлу сцени та створює екземпляр сцени рівня.
Додайте новий рівень як дочірній елемент менеджера рівнів; це фактично перемкне поточний рівень.
extends Node2Dvar level_number = 1
var screen_size = Vector2()
var is_switching_level = falsefunc _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 = falsefunc switch_level():
if is_switching_level:
returnis_switching_level = true
level_number += 1if level_number > 2:
level_number = 1
var player = get_node("Node2D/Player")if player:
var player_position = player.positionif 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 = 0get_node("Node2D").queue_free()
load_level(level_number)func _process(delta):
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.yif condition1 or condition2 or condition3 or condition4 :
switch_level()
Впровадивши Level Manager, ви можете плавно переходити між рівнями та зберігати дані про гравців на різних рівнях, забезпечуючи плавну гру.
Включно з додатковими функціями
Створення рівнів дозволяє додавати різноманітні функції до вашої гри, роблячи її більш привабливою та захоплюючою для гравців.
Предмети колекціонування
Додайте колекційні предмети, як-от монети, зірки або ключі, які гравці можуть збирати, щоб відкривати нові області чи отримувати нагороди. Предмети колекціонування заохочують до дослідження та додають геймплею складності.
Вороги
Знайомство з ворогами з різними моделями поведінки та рухів. Вороги створюють перешкоди, які гравець повинен подолати, додаючи грі стратегії та азарту.
бонуси
Додайте бонуси, які тимчасово підвищують здібності гравця, як-от збільшення швидкості, непереможності або посилення атак. Бонуси забезпечують моменти розширення можливостей і можуть допомогти гравцям подолати складні ділянки.
Головоломки
Створюйте елементи головоломки, які гравці повинні вирішити, щоб пройти рівень. Головоломки додають розумового аспекту ігровому процесу та можуть змусити гравців почуватися успішно, коли вони їх розгадують.
Включивши ці додаткові функції у ваші рівні, ви можете створити багатий і різноманітний ігровий досвід, який захоплює гравців і продовжує їх занурювати у ваш ігровий світ.
Найкращі методи створення рівнів
Під час створення рівнів пам’ятайте про певні найкращі практики, які допоможуть гравцям отримати якісний і приємний досвід:
Складність балансу
Підтримуйте плавну криву складності на всіх рівнях. Поступово збільшуйте завдання, щоб зацікавити гравців, не перевантажуючи їх. Впроваджуйте нові механіки та виклики поступово, дозволяючи гравцям адаптуватися та вчитися.
Заохочуйте дослідження
Проектуйте рівні з прихованими шляхами, секретами та додатковими областями, які гравці можуть досліджувати. Дослідження винагороджує гравців бонусами, предметами колекціонування або ярликами, додаючи глибини ігровому процесу.
Тестування та ітерація
Ретельно перевіряйте свої рівні, щоб виявити проблеми, помилки чи дисбаланс. Повторюйте дизайн рівнів на основі відгуків гравців, щоб покращити загальний досвід.
Відео та аудіо
Зверніть увагу на візуальні та звукові аспекти ваших рівнів. Захоплююча графіка та звукові ефекти, які не захищені авторським правом, можуть значно сприяти атмосфері та зануренню у вашу гру.
Рівень потоку
Переконайтеся, що потік рівня є плавним і логічним. Ведіть гравців через рівень за допомогою чітких візуальних підказок і уникайте тупиків або заплутаних макетів.
Дотримуючись цих найкращих практик, ви можете створювати рівні, на які не тільки приємно грати, але й добре продумані та узгоджені з контекстом вашої гри.
Рівні зроблять ваші ігри Godot більш захоплюючими
Рівні відіграють вирішальну роль у тому, щоб ігри Godot були більш привабливими для гравців. Добре продумані рівні створюють відчуття прогресу, досягнень і досліджень, спонукаючи гравців продовжувати гру.
Розуміючи принципи дизайну рівнів, використовуючи можливості Годо та впроваджуючи додаткові функції, ви можете створювати рівні, які захоплять гравців і піднесуть вашу гру на нові висоти.