Найти в Дзене
Coding Life

Создание 2D игры на Godot Engine. Часть 1. Управление.

Итак в этом уроке я расскажу как создать 2d игру. Сделаю простой платформер по типу Mario. Я буду использовать Godot Engine 3.5, все ресурсы используемые мной были взяты из интернета.

Итак создадим проект в Godot, создадим 2d сцену и назовем её Word.

Далее создадим нашего персонажа в отдельной сцене. Добавим KinematicBody2D, а к нему узлы AnimatedSprite2D и CollisionShape2D.

-2
Назовем для удобства  главный узел Player
Назовем для удобства главный узел Player

Итак разберемся:

KinematicBody2D - это кинематическое тело, которым мы можем управлять с помощью кода, писать разную физику, управление и т.д.

AnimatedSprite2D - это узел для создание анимации спрайтов(текстуры) какого-либо тела.

CollisionShape2D - это узел для создания коллизии, что бы наши объекты могли сталкиваться с друг другом и взаимодействовать.

В узле анимации создадим "Новый SpriteFrame", далее добавим новую анимацию бега и и просто добавим статичную анимацию бездействия.

-4
-5
-6
-7

Теперь в сцене World создадим TileMap для постройки нашего уровня.

-8
-9
-10
Размер одного Tile'a 64х64
Размер одного Tile'a 64х64

Здесь выберите "новая одиночная плитка", затем регион , выделите Tile, после нажмите на "столкновение" и нажмите на значок квадрата и выделите плитку для создания коллизии.

-12

Приступим к рисования уровня.

-13

Теперь можно добавить и игрока.

-14

После запуска(F5) ничего не произойдет, потому что мы еще не написали физику.

-15

Добавим скрипт к узлу игрока и добавим следующий код.

-16

Разберем код:

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) // добавляем скольжение по другим объектам

На этом урок все. В следующем добавим камеру и фон.