Давайте для начала добавим новые комментарии и я исправлю один свой – вместо “Движение вверх” я напишу “Движение вперед”, так как это больше соответствует смыслу.
Далее удалим ниже код, который мы не используем, он нам больше не нужен.
Теперь создадим переменную для движения вперед. Просто скопирую переменную SidewaysForce и изменю имя (будет ForwardForce) и значение на -1.
Далее я хочу показать вам еще один способ как можно изменить параметры в действиях. Просто 2 раза кликните по параметру, чтобы открылось окно где мы можем х изменять.
Удаляем значение с Y component и нажимаем кнопку E 123 (т.е. кнопка выражения, которая может связывать значение данного параметра (или выражение) с другими доступными ему значениями параметров, которые есть в игре). Или если говорить проще, данная кнопка связывает данные между собой. Например, мы видим что для данного параметра доступны значения переменных.
Выбираем переменную ForwardForce.
Далее мы хотим умножить значение ForwardForce на TimeDelta, и она тоже доступна нам через кнопку “E ABC”.
Нажимаем кнопку Ок и запускаем игру чтобы проверить все ли в порядке.
Теперь добавим камеру. Дня начала создадим новую группу под названием “Камера”, и создадим внутри этой группы событие.
Итак, условие нам не нужно, так как камера будет работать каждый кадр игры, а вот в действии ищем “Center Camera on the object”.
В параметре Object выбираем Player. Далее у нас идут следующие пункты:
Anticipate the movement if the object (“Предвидеть движение объекта”) – это связано с экономией вычислительных ресурсов, т.е. камера не будет на каждый кадр будет определять, где объект находится, чтобы следовать за ним, а будет предугадывать его положение. Например, если объект двигался вправо, то большая вероятность, что следующий кадр он также будет вправо. Т.е. камера не каждый кадр определяет местоположение объекта, а через промежутки кадров.
Поле Layer оставляем пустым, так как у нас всего один слой. И Cameras number тоже оставляем пустым – так как у нас всего одна камера.
Проверяем. Как видим, камера работает, но это не совсем то чего мы хотели, так как при движении игрока вверх (или вперед), наши стрелочки уходят за пределы экрана, если двигаемся вправо или влево, то земля также уходит за пределы экрана.
Давайте для начала увеличим объект Ground вверх и вниз. Сделаем это с помощью свойств.
Но в итоге вы увидите что объект Player увеличился в направлении вниз, так как начало координат по умолчанию для всех объектов является верхний левый угол. Чтобы разместить теперь этот объект вверх, просто изменим его положение по Y. Для движения вверх нам необходимо отрицательное значение.
Теперь давайте добавим больше препятствий.
Так как камера перемещается по центру объекта, то при движении объекта влево-вправо, дорога как бы перемещается в обратном положении, что не есть красиво. Для решения этой проблемы нам поможет камера по оси Y. Удалим нашу камеру и поставим камеру по Y.
В отличии от камеры по центру объекта, для камеры по Y, необходимо указать координаты. В качестве координат мы будем использовать центр объекта по Y. Т.е. в первом пункте выбираем “=(set to)”, а во втором выбираем центр нашего объекта. В остальных пунктах оставляем значения по умолчанию.
Запускаем. Теперь у нас новая проблема, объект находится в центре экрана, что усложняет наш обзор, что есть впереди объекта, а то что сзади нам не нужно. Исправить это можно переместив камеру на 300px вниз относительно центра нашего объекта по Y.
Далее решим еще одну проблему – это уходящие вниз кнопки. Для ее решения создадим новый слой: перемещаемся в окно редактирование сцены и выбираем эту кнопку.
У нас открывается окно со слоями, где вы можете видеть только базовый слой и фоновый цвет. Создадим новый слой с именем “UI”, где мы будем размещать объекты пользовательского интерфейса.
Вы можете заметить белый кружочек возле слоя Base layer. Если возле слоя стоит этот кружочек, значит новые объекты по умолчанию будут появляться именно на этом слое.
Теперь переместим кнопки на слой UI.
Запускаем игру и видим, что теперь кнопки никуда не уходят. Почему так происходит? Дело в том, что каждый слой обладает своей камерой, каждая из этих камер видит только объекты на своем слое, и когда мы запускаем игру, мы сразу видим то, что видят все камеры. Первой камере мы задали следовать за объектом Player, а вторая на UI остается на месте и никуда не двигается, поэтому кнопки остаются на месте.
Давайте рассмотрим один случай с камерами, чтобы вы лучше понимали как они работают. Давайте переместим объект Player на слой UI и камера на этом слое будет следовать за этим объектом.
Теперь запускаем игру. При движении вперед наши кнопки уходят вниз, так как объект Player идет вверх и камера на слое UI следует за ним. Но препятствие не приближается, и самое странное что в какой-то момент они сталкиваются, но на экране находятся далеко друг от друга. Дело в том, что камера на UI видит только свой объект Player и кнопки, а камера на базовом слое видит дорогу и препятствие и эта камера в данный момент статична, она никуда не следует, вот почему препятствие и дорога не двигаются. Но по факту так как эти объекты находятся с друг другом только на разных слоях, они, при движении объекта Player вперед, столкнуться, просто камера на слое UI не видит с чем объект Player столкнулся, так как препятствие находится на другом слое, а камера на основном слое не видит с каким объектом столкнулось это препятствие, так как он не видит объекта Player. Вот, надеюсь не сложно объяснил:)
Теперь вернем все как было: переметим объект Player на основной слой и пусть камера на базовом слое следует за ним.
И напоследок, давайте теперь добавим эффект тени для нашего объекта Player. В GDevelop можно применять эффекты как к отдельным объектам так и к слоям. Сейчас мы рассмотрим добавление эффектов к объектам. Два раза кликните по объекту Player и выберите раздел Effects.
Нажимаем на кнопку Add an effect и выбираем Drop Shadow.
Откроется такое окно:
Давайте рассмотрим все пункты по порядку:
Alpha – добавляет прозрачности для тени;
Blur – размытие;
Color of the Shadow – цвет тени;
Distance – это удаленность тени от объекта, чем выше значение, тем дальше тень находится от объекта;
Padding – это расстояние вокруг объекта, где будет видна тень. Если мы разместим тень слишком далеко, а в этом параметре укажем маленькое значение, то тень мы увидим;
Quality – размытость тени;
Rotation – определяет местоположении тени относительно объекта (справа, слева, внизу и т.д.).
Shadows only – показать только тень, скрыть объект.
Значения я введу такие:
Проверяем и видим, что у объекта появилась тень.
Теперь давайте добавим тень к препятствию с теми же значениями, что и у объекта Player. После этого добавим тень для дороги с такими значениями:
Данная тень будет с одной стороны дороги, а хочу чтобы тень была и с левой и с правой сторон. Для этого добавляю еще одну тень и в параметре, копирую значения, только в параметре Rotation ставлю значение 60.
И мы должны получить такой результат: