close

Рабочая программа «Разработка компьютерных игр на движке Godot Engine» Знакомство с Godot Engine и Проект «Pong». Часть 10

10.        Сброс мяча

 

Каждый раз, когда мяч вылетает за предела экрана, нам нужно делать сброс мяча, иными словами возвращать его на начальную позицию. Есть разные способы сделать это, к примеру, мы могли бы через скрипт определять местоположения мяча, а после возвращать на исходную позицию, но пойдем другим путем. Мы будем использовать для этих узел, а еще мы познакомимся с еще одной механикой Godot «Сигналы».

Еще один узел их физических узлов «Area2D», он не проверяет коллизию, не останавливает объекты, но узел вычисляет, когда другое физическое тело попадает в его область. Поэтому мы собираемся разместить слева, и справа за областью видимого игрового поля, и когда мяч будет попадать в узлы «Area2D» мы будем возвращать мяч в середину экрана, в исходное позицию.

Вернемся к нашей основной сцене уровня. И прикрепим к узлу «Level», наш новый узел «Area2D». Попробуйте сделать это самостоятельно, если не получилось загляни под спойлер.

 

Как и с другими физическими узлами, узел «Area2D» требуется форма столкновения (хотя по сути не будет столкновения), для обозначение области с которым будут взаимодействовать объекты. Снова прикрепим узел «CollisionShape2D» на этот узел. Для прикрепления узла есть горячие клавиши, ctrl + a, попробуйте. 

Как и другим игровым элементам мы добавляем форму прямоугольника, в форме столкновения.

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

И вы должны узнать одну вещь, связанная с узлом «Area2D», все что попадает в её границы, будут активировать узел «Area2D», и не важной какой физический объект туда попадет. Даже стены которые будут соприкасаться с ней, будут активировать её. Так что ваша задача создать зону покрытия, но не соприкасаться со стенами.

Так же создадим копию узла с его формой столкновения через горячие клавиши ctrl + d, выберете только узел «Area2D», когда будете копировать. А еще закрепите дочерний узел и перетащите в правую сторону, перекройте правую границу.

По умолчанию узлы «Area2D», ничего нам не сообщат если какой-либо объект их пересечет. Для этих целей нам понадобиться особый механизм, новая концепция – сигналы.

И все что делают сигналы, так делают заметки которые помогают нам общаться с другими узлами. И то что нам понадобиться это лишь то, что наши узлы «Area2D» сообщали нам, когда что-то попадает в их область. И чтобы подключить сигнал, нам понадобиться немного кода, так как сигналы создают новые встроенные функции которые работают на определенных экземплярах.

Начнем, только сначала переименуем наши узлы «Area2D» на «Left» (левая область) и «Right» (правая область) двойным нажатием на мыши по имени узла.

Выберете узел «Left», и правее инспектора узла, вы найдете еще одну вкладку под названием «Узел»

Щелкните по ней. Там будут сигналы и группы, работаем сейчас с сигналами, с группами мы еще познакомимся в следующих разделах. 

Если присмотреться, то мы увидим целый список сигналов, но сейчас нас интересует только один.

Сигнал «body_entered», срабатывает, когда в область попадает объекты похожие на мяч, любые физические тела.  Он та нам и нужен, щелкните по нему два раза.

Проблема в том, что сигналы мы можем подключить лишь тем объектам которым прикреплен скрипт.

Желательного для полного контроля над игровыми объектами использовать скрипт на главном узле, в прочем давайте это сделаем, пока что отмените присоединение сигнала и далее мы создадим новый скрипт и прикрепим к узлу уровня. Прикрепите новый скрипт к узлу «Level» и сохраните его как он изначально и предлагает.

Почистим код оставив только первую строчку.

Далее вернемся с дереву сцен выберем наш узел «Left» (который Area2D), перейдем к сигналам и выберем сигнал ««body_entered»». Щелкните снова по нему два раза.

Теперь мы можем подключить наш сигнал к главному узлу «Level», так как к нему прикреплен узел. Так же мы можем поменять название функции, но по умолчанию они не плохо так подходят по смыслу.

Нажмите присоединить скрипт.

И теперь у нас появилась новая встроенная функция в скрипте уровня, которая будет срабатывать в том случаи, если в область узла «Area2D», будет попадать физический объект.

И чтобы испытать, действительно ли шарик будет активизировать область, мы пропишем такую команду.

Команда print выводит сообщение на консоль Годота. Запустите проект, нужно чтобы шарик попал в левую область экрана, не препятствуйте ему. И вы увидите в самом годоте, внизу, в консоли сообщение о столкновении.

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

Так как мы убедились, что область активируется, следующие что нам следует сделать это повлиять на сам мяч, и вернуть его в середину нашего игрового поля. Но на этот раз ситуация немного отличается, по сравнению с соперником. У соперника мы прописывали путь, по которой мы вычисляли сам мяч, начиная от родителя и заканчивая поиском самого мяча. В этот раз мы находимся в родительском узле, и нам нужно подгрузить дочерний узел, но как это сделать, все просто, добавьте знак «$» в код и наведите на нужный объект, в нашем случаи мяч. Да не забудьте удалить print, он нам не понадобиться.

Если выбор узлов не выскачет, просто ведите знак доллара и название самого объекта «$Ball». Таким образом мы обращаемся на прямую к объект мяч

Далее пропишем его позицию и зададим вектор 2, с координатами.

Заметка, обычно мы использовали вектор2 как источник направления движение объектов, но на этот раз мы используем его форму для указание точных координат. Как вы заметили мы используем метод «position», он нужен для указание координат. И да он находится в инспекторе любых объектов во вкладке «Transform», а координаты 640 и 360 это наша середина разрешение экрана 1280 на 720 пикселей.

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

 

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

Категория: Разработка игр на Godot Engine | Добавил: Doctor_Bug (10.12.2022)
Просмотров: 22 | Рейтинг: 5.0/1
Всего комментариев: 0
avatar