Как стать автором
Обновить

Учебный проект на Godot — Pong (часть 2) Создание и настройка мяча

Время на прочтение4 мин
Количество просмотров3.6K

Приветствую вас, хабровчане! В этой части я буду создавать и настраивать мяч для игры Pong. Если вы пропустили начало, то оно здесь. Уровень статьи по прежнему начинающий.


Под катом по прежнему много скринов.

Зовите детей и welcome под кат.


Для редактирования проект открывается двойным кликом по названию проекта или кнопкой "Edit".



При повторном запуске движка созданная ранее сцена не открылась. Открыть её можно двойным кликом по ней в панели "File System" аналог панели в Unity называется Project.


Теперь можно создавать мяч, правильный порядок для данного движка, физическое тело и два его наследника: коллайдер и графика. Но я буду делать в другом порядке, заодно и расскажу почему нужен именно такой порядок узлов.


Первое что я хочу сделать с мячом, увидеть его. Потому начну с графики. Я могу нарисовать белый квадрат 3 на 3 пикселя в любом графическом редакторе. Однако я не люблю делать в сторонней программе, то что могу сделать прямо в движке.


Для добавления узла на сцену нужно нажать на плюс в панели сцены. (Разумеется есть возможность использовать контекстное меню или горячие клавиши)



В открывшемся окне появляется огромный список различных типов узлов. Их все нужно просмотреть, в идеале прочитать про каждый из узлов в документации, или хотя бы просмотреть все узлы прямо в списке прочитав описание каждого из них.


Это поможет лучше понимать какие узлы есть в движке и что с ними делать. А для нашей текущей цели подходит узел Polygon2D.



По умолчанию все узлы создаются дочерними относительно корневого узла, если нужно создать узел дочерний относительно какого-то конкретного узла его следует создавать предварительно выделив родительский узел. Очевидно, что с корневым узлом это делать не обязательно.


Пришло время обратить внимание на правую часть окна, там располагается панель инспектора.



Для самых маленьких

Квадрат это геометрическая фигура состоящая из 4-х углов и 4-х сторон, при чём у него все стороны равны между собой.


Размер полигона определяет количество углов, после чего появляется список точек координаты которых следует ввести, лично я предпочитаю начать с левого верхнего угла и двигаться по точкам по часовой стрелке. Обрисовывая фигуру вокруг центра. По умолчанию, в Godot, центром всех узлов является левый верхний угол сцены. И введение долей пикселя разрешено.



Теперь можно настроить "Transform" и расположить мяч в центре сцены.
Чтоб лучше его видеть нужно слегка увеличить игровую сцену в основной части окна.
Прокручивание скроллера на мышке позволяет увеличивать и уменьшать сцену, а клик на скроллер и перемещение мышки двигать сцену.



Теперь нужно заставить мяч двигаться, и тут есть два основных пути:


  1. Можно менять настройку "Transform", и двигать мяч так-же как я подвинул его в центр сцены но, с помощью программного кода и плавно.
  2. А можно добавить к этой графике узел физического элемента такие называют "Твёрдое тело" или "Физический объект". И двигать воздействием физического движка на этот объект.

Физический движок позволяет использовать максимально аккуратные, плавные и правдоподобные движения без необходимости описывать все сложные расчёты самостоятельно.


К тому же, помимо движения мяча нам ещё нужно определять столкнулся ли мяч с границей экрана? Если столкнулся, то с какой из границ? Столкнулся ли мяч с ракеткой? Если столкнулся то с какой из ракеток и с какой её частью? А вот эти вещи легче всего проверять используя физический движок.


Вообще для этого выбора есть очень простая схема. Если все объекты в игре двигаются по сетке и существует очередь движения. Например, в шахматах черный игрок не начнёт свой ход до того как белый игрок свой ход завершил. И никто из игроков не имеет права двигать несколько фигур одновременно.


В таких играх удобно напрямую менять настройки "Transform".
Для всех остальных случаев есть физический движок.


Теперь, думаю, очевидно, что в игре Pong удобней использовать физический движок.


Для этого нужно к мячу, сейчас это узел "Polygon2D" добавить узел "PhysicsBody2D"



Но таких узла три: Kinematic, Rigid и Static. Согласно описанию:


  1. Kinematic — это физический объект двигающийся согласно написанному программному коду, не подчиняясь физическому движку. (Наш вариант)
  2. Rigid — это физический объект полностью подчиняющийся физическому движку.
  3. Static — это неподвижный физический объект.

Аналоги этих узлов имеются во всех известных мне игровых движках, при чём в Unity они имеют такие же названия и свойства.


После добавления узла "KinematicBody2D" появляется уведомление об ошибке.



Наведя на него курсор станет понятно, что причиной ошибки является отсутствие у данного узла маски столкновений "Collider", в данном случае мне предложили на выбор один из двух вариантов: "CollisionShape2D" или "CollisionPoligon2D".


Полигон создавать я уже пробовал, теперь хочу посмотреть на форму. Которая при создании сообщает об ещё одной ошибке. На этот раз она говорит, что маска вроде бы и есть, а форму маски никто не создавал.


Создаётся она на панели "Inspector". Для нашего квадрата подходит форма "RectangleShape2D" со следующими настройками.



Теперь можно начинать двигать мяч по экрану но, физическим движком можно двигать только "Физическое тело" со всеми наследниками и двигаться оно будет относительно своего родителя. В данном случае тело вместе с коллайдером будет двигаться относительно нарисованного на сцене квадрата, который останется неподвижным на экране. Исправить это очень просто:


  • Чтоб физическое тело двигалось относительно сцены, его нужно сделать дочерним узлом сцены.


  • Чтоб нарисованный квадрат двигался вместе с физическим телом, его нужно сделать дочерним относительно физического тела.


Вот теперь двигая физическое тело я буду двигать маску столкновений вместе с нарисованным квадратом.


Мяч готов двигаться, в следующий раз мы наконец его запустим и посмотрим как это будет выглядеть в игре.


Буду рад вашей критике в комментариях.

Теги:
Хабы:
+11
Комментарии16

Публикации

Изменить настройки темы

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн