Давайте теперь создадим второй, точно такой же объект, только с именем Player (т.е. это будет наш игрок) и красного цвета.
Если кликнуть по объекту Player и посмотреть на его свойства, то вы увидите что изменился порядок в Z Order.
Т.е. у первого объекта он был 1, у нового 2. Так как объекты находятся на одном слое, и какой-то из объектов должен быть поверх другого, и в GDevelop новые объекты имеют значение в Z Order выше чем предыдущие, и они показываются поверх ранее созданных объектов.
Если мы хотим изменить порядок наложения объектов, то можем просто менять значения в Z Order.
Давайте теперь запустим игру нажав на эту кнопку в стандартном меню:
Откроется такое окно с игрой:
Как видите, ничего абсолютно не происходит. Это всего лишь два изображения и ничего больше. Закроем данное окно.
Чтобы добавить динамики, давайте добавим физическое поведение к объекту Player. Для этого дважды щелкните по объекту левой кнопкой мыши либо в рабочем окне, либо в окне объектов.
Откроется уже знакомое нам окно:
Как видите, у данного окна есть меню: Свойства (где мы можем настроить внешний вид и анимацию), Поведение (оно нам и нужно), Переменные и Эффекты (о них поговорим позже).
Нажимаем на пункт Behaviors и на кнопку Add Behaviors (т.е. добавить поведение).
Как вы видите открылся список заранее заготовленных поведений, т.е. как должен вести себя объект. Поведения также мы можем создавать сами, но сейчас мы выберем Physics Engine 2.0. Т.е. мы хотим, чтобы объект Player вел себя как физический объект в реальном мире, чтобы заставить его двигаться реалистично, следуя законам физики.
Откроется такое окно:
Давайте теперь его изучим.
Первой пунктом у нас идет название поведения, мы его можем свернуть, развернуть и удалить.
Т.е. если мы свернем его, то увидим просто список поведений примененных к этому объекту “Player”.
Но сейчас у нас только одно поведение в списке.
Идем дальше.
Дальше мы можем выбрать тип объекта:
Он может быть динамический, статический и кинематический.
Динамический тип: наиболее распространенный тип, динамические объекты, подвержены гравитации, могут сталкиваться с другими динамическими, статическими и кинематическими телами. Вы можете применять к ним силы и импульсы, а также изменять их скорость. Почти все, что должно двигаться, должно быть динамическим телом.
Статические: статические объекты не подвержены гравитации, и вы не можете перемещать их. Они могут сталкиваться только с динамическими объектами. Они предназначены для таких объектов как земля, неподвижные стены и платформы.
Кинематика: это тип статического тела, поэтому на них не будут влиять гравитация, но вы можете перемещать их, изменяя их расположение в мире. Кинематика сталкивается только с динамическими телами, но не изменяет от этого своего направления движения и скорость. Кинематические тела полезны для моделирования подвижных платформ.
Переходим к следующим настройкам:
Если мы поставим галочку для Bullet (т.е. пуля), то движок каждый кадр игры будет анализировать его столкновения, т.е. каждый кадр говорить в первом кадре – “Столкнулся ли объект с другим объектом? Проверим! Нет” 2 кадр – “А сейчас? Тоже нет , 3 кадр “А сейчас? Да!”. Т.е. если ваша игра будет работать у пользователя в 60fps в секунду, то такая проверка столкновений будет происходить 60 раз за секунду. Если многим объектам поставить данную настройку, то это снизит производительность игры.
Дело в том, что по умолчанию Gdevelop проверяет наличие столкновений не каждый кадр игры, а раз, примерно в 10 кадров. Это может быть чревато тем, что если пуля столкнется с очень тонким объектом, то движок без настройки bullet для пули может не зафиксировать это столкновение и пуля пролетит мимо.
Ставьте галочку Bullet, если объект реально нуждается в нем.
Далее у нас идет настройка Fixed Rotation, которая предотвращает вращение объекта. Если бы такой настройки не было, то ваш персонаж постоянно бы вращался сталкиваясь с препятствиями на уровне, что для платформера не есть хорошо.
И последняя настройка здесь – это Can Sleep. Если движущийся объект на какое-то время находится в одном месте, т.е. не движется, то движок может для него отключить анализ столкновений, что помогает увеличить производительность игры переводя такой объект в так называемый спящий режим.
Затем у нас идет следующий раздел – это форма физического тела.
Дело в том, что к объектам, к в нашем случае у спрайту, добавляется еще физическое тело, на которое и будут реагировать другие объекты с физическими телами (т.е. с добавленным поведением Physics 2). И это физическое тело может не совпадать по размерам и форме спрайта. Например, у нас есть такой спрайт с таким физическим телом, которые не соответствуют друг другу по размерам:
И также у нас есть платформа, где физическое тело полностью совпадает со спрайтом:
Теперь, если наш персонаж Марио столкнется с данной платформой, допустим он будет идти по ней, то соприкасаться будут только физические тела, а не спрайты:
Получается, что ноги Марио как бы провалятся внутрь платформы. Т.е. повторись, сталкиваются с друг другом только физические тела.
Итак в первой настройке, мы можем выбрать форму физического тела:
Это Box (прямоугольник), Circle (эллипс), Edge (грань) и Polygon (многоугольник).
Думаю, с прямоугольником и эллипсом все понятно. Грань – это просто тонкая линия, с которой будут взаимодействовать другие тела. Например, грань очень хорошо подходит для земли, так как персонаж взаимодействует только с верхней гранью земли, то можно эту линии поставить туда:
В большинстве случаев, персонажам, таким как Марио и т.д. создают физическое тело “Прямоугольник”, не подгоняя физическое тело прям точно по форме спрайта:
Но если вы считаете, что физическое тело должно более точно соответствовать форме спрайта, чем мы делали это с помощью предыдущих объектов, то можете воспользоваться формой “Многоугольник”.
Если выберем многоугольник, то появится дополнительная настройка:
Давайте выберем картинку для многоугольника, с помощью этой настройки:
Здесь мы можем выбрать спрайт который уже есть в игре или добавить свою картинку:
Так как нашему объекту подойдет физическая форма прямоугольник, то здесь для лучшей наглядности, я выберу картинку с оружием.
Вот и появилась моя картинка в окне для просмотра картинки. Справа вверху есть настройки масштаба и последняя кнопка, это сделать чтобы вся картинка полностью помещалась в окне просмотра.. Например, вы увеличивали картинку, а теперь хотите посмотреть на результат в целом, просто нажмите на эту кнопку.
Теперь давайте добавим углы для многоугольника – он должен содержать минимум 3 угла и в GDevelop есть ограничение на количество углов – максимум их должно быть 8. Я сперва добавлю 4 угла с помощью кнопки “+”, которая находится ниже окна просмотра.
Как видите, у координаты точек, которые формируют углы находятся в x:0 и y:0, т.е. все 4 точки находятся в центре картинки. Слева вы можете увидеть восклицательный знак – он говорит что что-то не в порядке. В данном случае, так как все точки находятся в центре, то они не формируют никакие углы.
Перемещу их с помощью левой кнопки мыши по разным сторонам.
Теперь, как видите, пропали восклицательные знаки и появились новые координаты у каждой из точке. Добавлю еще точки для уточнения формы.
И вот я создал многоугольник, который хотел, но почему появились восклицательные знаки? Дело в том что в GDevelop угол, которая формирует точка не должен превышать 180 градусов.
Исправлю углы, которые превышают 180 градусов.
Теперь все хорошо. Но данную картинку я использовал только для примера, а нашему объекту Player подойдет обычный прямоугольник. Давайте выберем значение Box, и картинку нашего объекта для визуализации.
Если оставить в настройках Width и Height нули, то физическое тело будет полностью соответствовать размеру картинки. Здесь это трудно видно, так как физическое тело и картинка красного цвета. Но мы можем с помощью настроек Shape Offset X и Y.
Перемещаемся к следующей группе настроек.
Первая настройка – это плотность тела (density), или его масса. Чем выше это значение, тем тяжелее объект. Плотность также зависит от размера объекта, например, объект размером 50px на 50px и плотностью 1, будет легче объекта размером 100х100px и плотностью 1.
Плотность не может быть отрицательной!
Friction (трение) – трение добавляет силу к соприкасающимся телам в направлении, противоположном направлению их движения. Чем выше трение, тем быстрее объекты будут замедляться при контакте. Чтобы лучше понять, платформа, сделанная из песка, будет иметь коэффициент трения, близкий к 1 (очень высокий), в то время как платформа, сделанная из льда, будет иметь коэффициент трения, близкий к нулю.
Трение не может быть отрицательным!
Когда два объекта соприкасаются, общее трение вычисляется с использованием трения сталкивающихся объектов по формуле: friction = sqrt(frictionA * frictionB).
Line Damping (Линейное демпфирование): Линейное демпфирование постоянно уменьшает скорость объекта. Чем выше значение, тем быстрее оно замедляет объекты. Вы можете представить это как вязкость воздуха, очень высокие значения даже имитируют движение объекта в жидкости.
Хотя вы можете использовать любое значение, отрицательное демпфирование заставит объект набирать скорость на каждом шаге, создавая нефизическое поведение.
Gravity Scale (Шкала гравитации): шкала гравитации умножается на мировую гравитацию, чтобы определить силу тяжести, приложенную к объекту. Обратите внимание, что это число, а не вектор; вы не можете изменить ориентацию гравитации, только величину. Допустимо любое число, несколько примеров: если шкала гравитации равна 1, применяемая гравитация будет равна мировой гравитации; если она равна 2, гравитация будет в два раза сильнее для этого объекта; если она равна 0,5, гравитация будет в два раза слабее; если она равна 0, то на объект не влияет гравитация, и если оно равно -1, гравитация будет инвертирована.
Angular Damping (Угловое демпфирование): Угловое демпфирование аналогично линейному демпфированию, но вместо замедления линейной скорости объекта, оно замедляет угловую скорость, заставляя объект вращаться медленнее с каждым шагом.
Здесь вы тоже можете использовать любое значение, отрицательное демпфирование заставит объект набирать угловую скорость на каждом шаге, создавая нефизическое поведение.
Последний раздел настроек – это слои и маски. Слои и маски – это способ фильтрации столкновений между объектами. Но их мы изучим уже позже на следующих уроках.
Все необходимые настройки мы внесли (сделали физическое тело прямоугольным), нажимаем кнопку Apply.
Теперь переместим наш объект выше и нажмем кнопку предварительного просмотра.
Вы увидите, что объект падает вниз, т.е. к нему применяется гравитация теперь. Однако ему не на что приземлиться. Давайте для этой цели используем наш первый объект “Ground” разместив его так:
Затем мы также ему зададим физическое поведение, то в разделе тип объекта укажите Static, чтобы этот объект был статичным и не падал.
Снова включив режим предварительного просмотра вы увидите как объект “Player” приземлиться на объект “Ground”.