Итак в этом уроке я расскажу как создать 2d игру. Сделаю простой платформер по типу Mario. Я буду использовать Godot Engine 3.5, все ресурсы используемые мной были взяты из интернета.
Итак создадим проект в Godot, создадим 2d сцену и назовем её Word.
Далее создадим нашего персонажа в отдельной сцене. Добавим KinematicBody2D, а к нему узлы AnimatedSprite2D и CollisionShape2D.
Итак разберемся:
KinematicBody2D - это кинематическое тело, которым мы можем управлять с помощью кода, писать разную физику, управление и т.д.
AnimatedSprite2D - это узел для создание анимации спрайтов(текстуры) какого-либо тела.
CollisionShape2D - это узел для создания коллизии, что бы наши объекты могли сталкиваться с друг другом и взаимодействовать.
В узле анимации создадим "Новый SpriteFrame", далее добавим новую анимацию бега и и просто добавим статичную анимацию бездействия.
Теперь в сцене World создадим TileMap для постройки нашего уровня.
Здесь выберите "новая одиночная плитка", затем регион , выделите Tile, после нажмите на "столкновение" и нажмите на значок квадрата и выделите плитку для создания коллизии.
Приступим к рисования уровня.
Теперь можно добавить и игрока.
После запуска(F5) ничего не произойдет, потому что мы еще не написали физику.
Добавим скрипт к узлу игрока и добавим следующий код.
Разберем код:
extends KinematicBody2D
var speed = 200 // создаем переменную скорости игрока
var gravity = 100// создаем переменную гравитации игрока
var velocity = Vector2()// создаем переменную velocity для перемещения игрока в пространстве
Здесь создаем функцию ввода для управления, далее определяем что делать по нажатию клавиш(стрелок), как и куда перемещаться.
func get_input():
velocity = Vector2()
if Input.is_action_pressed("ui_right"):
$AnimatedSprite.flip_h = false // поворачиваем спрайт в нужное направление
$AnimatedSprite.play("run") //играем анимацию бега
velocity.x += 1
elif Input.is_action_pressed("ui_left"):
$AnimatedSprite.play("run")//играем анимацию бега
$AnimatedSprite.flip_h = true// поворачиваем спрайт в нужное направление
velocity.x -= 1
else:
$AnimatedSprite.play("default")//играем обычную анимацию
velocity = velocity.normalized() * speed // нормализуем передвижение
velocity.y += gravity //добавим гравитацию
if is_on_wall(): // поверим если на игрок на полу, для того чтобы нельзя было вечно прыгать
if Input.is_action_just_pressed("ui_up"):
$AnimatedSprite.play("jump")
velocity.y -= 5000
func _physics_process(delta):
// запустим функцию
get_input()
velocity = move_and_slide(velocity) // добавляем скольжение по другим объектам
На этом урок все. В следующем добавим камеру и фон.