Создаем TDS. Часть вторая

Добавлен , опубликован
Раздел:
Constuct

Вступление

Эта вторая часть урока по созданию TDS. Основное внимание в ней мы обратим на создание врагов, обладающих простым искусственным интеллектом (ИИ), и простенького интерфейса игры.
Статья расчитана на то, что вы уже рассмотрели первую ее часть, а также урок "Структура событий в Construct".

Приступая к работе

Для начала загрузите спрайты, расположенные ниже, на жесткий диск вашего компьютера, они понадобятся нам позже.
Тепрь открываем исходник из первой части (Это фаил с расширением cap, который вы создали в процессе прохождения предыдущей части урока). Если же он у вас отсутствует, то его можно скачать по этой ссылке

Начало

На панели справа выбираем верхний слой - Game. теперь добавляемые объекты будут появляться на нем.
Добавляем новый объект - спрайт (Щелкаем правой кнопкой мыши по уровню и жмем Insert an Object. Далее выбираем тип объекта, то есть Sprite и жмем Insert, после чего щелкаем левой кнопкой по уровню, что откроет графический редактор). В графическом редакторе, с помощью кнопочки Open загружаем спрайт Bittle001, который вы сохранили на свой компьютер. Закрываем графический редактор, сохраняя изменения.
Уменьшаем противника и меняем ему имя.
Width = 80
Height = 80
Name = Bittle
Открываем справа вкладку Animator, щелкаем по надписи Default, расположенной выше.
На открывшейся панели слева меняем параметр
Animation name = Stand
Вкладка Animator разделена на два окошка. Щелкаем по нижнему, в котором отображается спрайт нашего врага, правой кнопкой мыши.
В открывшемся меню щелкаем Import Frames. Находим и выбираем два оставшихся спрайта противника (Bittle002, Bittle003). Жмем открыть и, ничего не меняя, жмем Import
Кликаем по надписи Angle: 0 (Right)
В окошке справа меняем парметр
Animation Speed = 10.
Запускаем игру и смотрим на врага, как видите, он виляет жгутиком. Выглядит не очень впечатляюще, но когда он будет быстро лететь на героя, чтобы разорвать его, движение жгутика будет выглядеть нормально. Кстати параметр, который мы только что выставили - это скорость анимации. Попробуйте поизменять его и посмотреть, что получится, подберите самое хорошее, на ваш взгляд, значение.
Добавляем врагу новое поведение - RTS. Параметры не меняем. (Данное поведение заставляет объект двигаться по игровому уровню, обходя препятствия)
Теперь создадим взрыв нашего жука.
Создаем новый объект - Particles
Этот тип объекта является источником частиц, он отлично подходит для создания эффектов взрыва. Разберемся, что это такое, создавая взрыв нашего жука.
Итак, на экране появился такой объект
Теперь займемся его настройкой, для этого щелкаем по нему и на панельке справа меняем параметры:
Name = Boom - ну, это понятно

Далее находим и меняем
Rate = 50 - колличество выбрасываемых частиц
One-shot = ставим галочку - этот параметр означает, что чстицы выбросятся 1 раз
Texture = щелкаем по синей надписи Edit и загружаем фаил SliziL - это текстура частицы
Use texture = ставим галочку заставляет частицы использовать текстуру
Size = 32 размер частицы
Speed = 400 скорость частицы
Spray cone = 360 разброс частиц в градусах (360 - во все стороны)
X randomiser = 64 при создании частица создается с произвольным сдвигом по оси X (Значение данного параметра - предел сдвига)
Y randomiser = 64 случайный сдвиг по оси Y
Size randomiser = 16 параметр отображает, на сколько одна частица может отличаться от другой по размеру
Display angle randomiser = 360 при создании частице устанавливается случайный поворот в пределах данного значения
Speed randomiser = 100 изначальная скорость частицы изменяется на любое число в данном пределе
Grow randomiser = 16 данный параметр отвечает, на сколько пикселей за секунду одна частица вырастет больше другой (Рандомизация роста частицы со временем)
Acceleration = -2000 ускорение частицы со временем. Если значение отрицательное, частица замедляется
Grow = 32 увеличение размера частицы в пикселях за секунду
Color = WebGreen изначальный цвет частиц
Fade to color = DarkGreen конечный цвет частиц
Fade colour time = 3000 время, за которое изначальный цвет сменится конечным
Ну, наверное, все. Ставим генератор частиц на уровень, запускаем игру и смотрим, что получилось.

Заставим врага двигаться и взрываться

Теперь оживим нашего врага. Для начала переместите источник частиц и врага за уровень.
Выбираем слой Background
Создаем новый объект, на текстуру ставим спрайт Nora. Инструментом Hotspot обозначаем центр. Из этой точки будут лезть наши жуки.
Меняем параметры норы
Name = Nora
Width = 128
Height = 128
Путем копирования и вставки создаем 4 норы и раскидываем их по уровню. (Если нора не выбирается и вы не можете ее скопировать щелкните по замочку около слоя BackGround). После всех операций, для удобства блокируем слой, щелкая по зеленому замочку напротив.
Выбираем противника и во вкладке Animator щелкаем правой кнопкой под анимацией Stand и жмем Add new animation.
Переименовываем новую анимацию в Death. Щелкаем по надписи ниже Angle: 0 (Right). После чего жмем два раза по пустому кадру №1, расположенному в нижнем окошке, и загружаем спрайт BittleDeath.
Переходим в редактор событий (Event Sheet Editor)
Добавляем событие
System -> Every X Miliseconds не нажимая Finish два раза щелкаем по объекту System в окошке снизу и находим Generate random namber, щелкаем по нему два раза. В итоге в строке должно отображаться random(1.0). Меняем строку так, чтобы получилось random(2000)+2000. Это событие означает, что действие будет происходить каждые (2 + любое число от 0 до 2) секунд.
Жмем Finish.
Добавляем подсобытие
System -> For each Object -> Nora -> Finish
Т.е. событие будет происходит для каждой норы.
К данному подсобытию добавляем действие
Nora -> Spawn another object -> Warrior; остальные параметры не меняем
Добавляем новое событие
System -> Every X Miliseconds -> 100 -> Finish
К нему добавляем действие
Warrior -> Вкладка сверху RTS; Move to object -> Gero
Добавляем новое событие
Warrior -> On collision with another object -> Bullet при столкновении с пулей
К нему - действия
Warrior -> Spawn another object -> Boom это создаст взрыв
Bullet -> Destroy это уничтожит пулю
Warrior -> set animation -> "Death" это сменит анимацию противника
Warrior -> вкладка RTS -> Set activated -> deactivate это отключит его движение
Warrior -> Send to back это сделает, чтобы уничтоженные враги были под живыми
TiledBackground -> Send to back это сделает, чтобы бакграунд был под врагами.
Запускаем игру, и что же мы видим? Пуля исчезает в уже умершем враге.
Добавляем к предыдущему событию подсобытие
Warrior -> an animation is playing -> "Stand" если враг еще не умер (У него проирывается анимация Stand).
Перетягиваем левой кнопкой все действия из события в подсобытие.
Вот что у вас должно получиться
Теперь сделаем здоровье главного героя
Открываем справа вкладку Project. У вас должно было открыться окошко с папками. Щелкаем правой кнопкой по Global variables и жмем Add global variable
В поле Name вводим Life, в Initial - 50. Мы только что создали перемнную. Существует два типа переменных: глобальные (Global) и личные (Private). Мы создали глобальную, она не зависит ни от чего и не теряет свое значение, например, при переходе через уровни. Личные переменные можно создать для определенного типа объектов, и для каждого объекта данного типа переменная индивидуальна (С помощью личных переменных можно, например, сделать здоровье противникам. Данный тип переменных мы рассмотрим позже).
В редакторе событий добавляем новое событие
Gero -> On collision with another object -> Warrior
К нему создаем подсобытие
Warrior -> an animation is playing -> "Stand"
К нему добавляем действия
Warrior -> Spawn another object -> Boom
Warrior -> set animation -> "Death"
Warrior -> вкладка RTS -> Set activated -> deactivate
Warrior -> Send to back
TiledBackground -> Send to back
И самое главное
System -> Subtract from value -> Life; 1 это вычтет одну жизнь у игрока.
Сделаем отображение жизней
Создаем объект типа Text
Меняем параметр
Name = Life
Цвет, размер, шрифт меняем по усмотрению, этот текст будет индикатором жизней. Ставим его в верхний угол экрана, туда, где будут отображаться жизни.
Заходим в редактор событий и дрбавляем событие
System -> always
И к нему действие
Life -> set text не нажимая Finish щелкаем два раза по объекту System, далее Get global variable.
Поле меняем так, чтобы получилось global('Life'). Жмем финиш. Это действие устанавливает текст на значение глобальной переменной Life.
Теперь сделаем, чтобы игра выключалась при условии, что жизней не осталось.
Добавляем событие
System -> Compare global variable -> Life; Less or equal; 0 если жизней не осталось
И к нему событие, выключающее игру
System -> Close
Вот и все.
Если у вас возникли какие-либо вопросы, пишите в комментариях, помогу чем смогу.
Удачи в освоении игростроя!