close

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

Рабочая программа «Разработка компьютерных игр на движке Godot Engine»

Знакомство с Godot Engine и Проект «Pong»



Оглавление разделов
1. Что же такое Godot. Установка программы
2. Знакомство с Godot Engine
3. Разработка игры Pong. Игрок

4. Программирование в Godot
5. Создание уровня
6. Создание противника

5.          Создание уровня 

Вся наша игра состоит из сцены игрока, но этого мало, мы хотим, чтобы у нас в игре были и другие элементы. Чтобы был противник и мяч, и они были бы отдельной сценой. Но мы должны собрать их в одну большую сцену. И это сцена будет «Сценой Уровня» (Level Scene). Для понга не нужно много элементов, все что нам нужно это ракетки игрока и противника, мячик, стены и немного кода для объединение игры.

Перейдем к нашей игре и создадим новую сцену, нажмите на плюсик на видовом экране сверху

А теперь мы должны определить какой узел будем использовать для главной сцены уровня

Можно было бы выбрать узел 2D, но мы выберем самый базовой узел, который не обладает ничем примечательным. Нажмите на кнопку «Другой узел» и выберете узел «Node»

Этот узел является классом для всех объектов Годота. Сам по себе этот узел ничего не может сделать.

Переменяйте его в «Level» (Уровень)

Обратите внимание на инспектор этого узла, все что тут есть так это пауза и скрипт.

Давайте сохраним нашу основную сцену. Горячее клавиши ctrl + S (или через меню – сохранить сцену) открывает окошко сохранение, создайте папку «Level» и сохраните там свою основную сцену с таким же названием.

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

Вот что у вас должно получиться в файловой системе

А теперь мы добавим нашего игрока. Мы создадим экземпляр игрока. Под экземпляром я имею виду копию нашего шаблона игрока. В дереве Сцен есть такая кнопка, она позволяет создавать экземпляры объектов

Нажмите на неё и выберете нашего игрока

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

Теперь наш игрок добавился в Сцену Уровня и будет иметь те же свойства что имел раньше. А давайте запустим сцену уровня через F6 и вы сможете так же им управлять но уже на «Сцене Уровня», а не на сцене Игрока. И если подняться слишком высока или спуститься слишком низко, то наша ракетка будет скрываться за пределами экрана, что есть тоже не совсем хорошо. Поэтому нам нужно что-то что ограничивало бы ракетку выход за предела экрана. И есть много разных способов ограничить нашего игрока. Но прежде чем мы это сделаем давайте поговорим о размере экрана нашей игры. Как мы помним синий прямоугольник указывает нам размер окна нашей игры. Давайте изменим её.

Переходим в самый вверх и в меню: Проект – Настройки проекта.

Здесь есть все настройки для текущего проекта

Спустимся ниже (с левой стороны опции) и найдем под опцию: Display - Window

Справа мы можем изменить размер нашего видового экрана: Width (ширина экрана), Height (высота экрана). Как мы видим по умолчанию всегда выставляется 1024х600, но для нашей игры эти значения не пойдут. Выставим значения 1280х720.

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

Опция «Borderless» - запускает игру без полей (аккуратно, а то придется выключать игру через сам движок, кнопкой остановкой или нажимать горячие клавиши alt + F4)

У меня даже игра не влезла в экран.

Опция «Fullscreen» -делает вашу игру полноэкранным, занимает всю область экрана.

Я не все описал опции, но пока что выстави разрешения экрана 1280х720 и этого достаточно.

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

Теперь перейдем к ограничителям нашей ракетки и у нас есть два способа как сделать это. Первый способ ограничить ракетку через скрипт или второй способ ограничить ракетку другим физическим объектом. Мы будем использовать второй способ. Пока что мы использовали «KinematicBody2D» для игрока, но для созданий стен, ограничителей, мы будем использовать новый физический узел. И это узел «StaticBody2D», давайте поговорим о нем:

•             Этот объект не может двигаться сам по себе (сами если прописать мы можем двигать), если на него действуют другие физические тела

•             Но он взаимодействует с другими физическими телами. Иными словами, другие объекты сталкиваются с ним, но не могут пройти сквозь него.

Статическое тело для 2D-физики. StaticBody2D — это тело, которое не предназначено для перемещения. Он идеально подходит для реализации объектов в окружающей среде, таких как стены или платформы. Кроме того, для статического тела может быть задана постоянная линейная или угловая скорость, которая будет воздействовать на сталкивающиеся тела так, как если бы оно двигалось (например, конвейерная лента).

Давайте создадим стену прямо здесь в «Сцене Уровня». Выберете узел «Level» и найдите узел «StaticBody2D» в поисковике, как всегда пару букв в поисковик и уже выдает результат.

Не забываем синим цветом текст узла указывает на 2D игры, конечно есть и трехмерный узел «StaticBody», который подписан красным цветом. Берем узел «StaticBody2D». И конечно, как любое физическое тело требует жерт… формы, об этом указывает восклицательный знак.

Помните какой узел мы применяли для добавление специальной формы для коллизии, к узлу «KinematicBody2D»?

Выбираем наш узел «StaticBody2D», и добавляем к нему узел «CollisionShape2D».

Учтите, что у вас должно выглядеть именно так, в узле «Level», должны быть дочернее элементы: узел «Player» и узел «StaticBody2D», а в узле «StaticBody2D» должен быть дочерний узел «CollisionShape2D». Иерархия здесь очень важна, иначе ваши узлы будут работать не корректно. Если у вас что-то находиться не на том месте, просто возьмите и перетащите элемент левой кнопкой мыши прямо в Дерево Сцен.

При перетаскивание объекта в который вы собираетесь вложить в другой объект выделяется синим прямоугольником, а если хотите поместить объект между другими объектами, то будет святиться синяя полоса.

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

Вернемся к разработке, В дереве сцен должна быть такая картина:

И как в прошлый раз снова появляется предупреждение у узла «CollisionShape2D», говорящая добавить форму. Помните, как мы добавляли форму? Добавьте прямоугольную форму в инспекторе узла.

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

Расширим нашу форму по горизонтали, и позвольте показать её действие. Перенесите по ближе к игроку, так чтобы она перекрывала к примеру, верхнею область в видимом поле. Сохраните сцену и запустите игру F6

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

Но вернемся к разработке. Это будущая стена нашего верхнего плана (и нижнего, когда будем копировать). Наша задача разместить её за границей видимого поля, мы можем растягивать её и перемещать. Для более точных настроек стены воспользуемся опциями в инспекторе узла «CollisionShape2D», в меню «Transform» в опции «Position» мы можем перемещать наш объект по х и y.

Если мы нажмем на саму форму, точнее то что мы выбирали в опции «Shape», то нам откроется дополнительная настройка формы

Размеры самого прямоугольника откроются в новой опции

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

Давайте сделаем ширину в 640 пикселей (по ширине станет 1280 пикселей), а по высоте 5 пикселей (по высоте будет 10 пикселей). Подобный размер по ширине соответствует ширине нашего игрового поля. А в Transform – Position по Х установим 640 пикселей, так как наш прямоугольник позиционируется на экране благодаря центральной точки и это с точностью сменит его положение на экране перекрыв область верхнего игрового поля сместив форму от левого края на половину.

А по Y установим -5, чтобы чуточку приподнять нашу форму. Теперь смотрите как точно мы смогли настроить нашу форму, перекрыв верхнюю область игрового поля.

Переименуем наш узел со стеной в «WallTop» (стена сверху).

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

Теперь давайте сделаем нижнею стену. Сможете сами сделать?

[spoiler]Мы просто с копируем нашу стену нажав горячие клавиши ctrl + D[/spoiler]

Не забудьте переименовать новую стенку в название «WalBottom» (Стена снизу).

Давайте переместим его вниз. Мы просто высчитаем и укажем в позиции нашего объекта координаты. Ширину трогать не будем, а вот вверх переместим. С учетом того что высота игрового поля равна 720 пикселей, а наша стена в толщину равна 10 (в размерах прямоугольнику указана половина ширины 5 до центра прямоугольника). Попробуйте высчитать какие координаты должна иметь Y, в transform – position. Только на этот раз мы перемещаем не форму узла «CollisionShape2D», а статический узел со стеной «WallBottom», который позиционируется от центральной точки, а не от формы.

[spoiler]Y – 730 пикселей[/spoiler]

Сохраните сцену и запустите игру F6 и вы не сможете выйти за пределы экрана.

Категория: Разработка игр на Godot Engine | Добавил: Doctor_Bug (20.09.2022)
Просмотров: 48 | Теги: Godot, game, Pong, games | Рейтинг: 5.0/1
Всего комментариев: 0
avatar